모듈

Ink API는 모듈화되므로 필요한 만큼만 사용할 수 있습니다.

모듈은 잉크 라이브러리의 기반 역할을 하며 상호작용하기 위한 핵심 데이터 유형을 포함하는 기본 API 인터페이스입니다. 있습니다. 이 모듈의 주요 데이터 유형은 다음과 같습니다.

  • StrokeInputBatch: 위치, 타임스탬프, 선택적으로 압력, 기울기, 방향을 포함하는 일련의 포인터 입력을 나타냅니다. 이 데이터는 Stroke 또는 InProgressStroke 클래스와 함께 활용할 수 있으며 필기 인식 라이브러리의 입력을 제공하는 유형입니다.
  • Stroke: 변경 불가 고정된 도형으로 완성된 스트로크의 표현입니다. 획은 - ImmutableStrokeInputBatch (입력 포인트), Brush (스타일 지정), PartitionedMesh (기하학적 모양) 스트로크는 실행할 수 있습니다
  • InProgressStroke: 그리기 프로세스 중에 증분 입력 처리 및 실시간 렌더링을 위해 설계된 Stroke의 변경 가능한 대응 항목입니다. 종종 다음을 통해 간접적으로 사용되기도 하지만 InProgressStrokesView, InProgressStroke 고급 맞춤설정에 직접 활용할 수 있습니다.

도형

Geometry 모듈은 교차 감지 및 변환 작업과 함께 기본 도형과 복잡한 도형 모두에 사용할 수 있는 도형 프리미티브 모음을 제공합니다. 이러한 프리미티브는 잉크 획과 원활하게 통합되어 전체 획 지우개 및 마키 선택 도구와 같은 기능을 지원합니다.

BoxVec와 같은 클래스는 주로 기하학적 작업을 용이하게 하지만 PartitionedMesh에는 렌더링 관련 데이터도 포함될 수 있습니다.

브러시

Brush 모듈은 획 생성 및 렌더링을 위한 선언적 구성으로 작동하며 텍스트 글꼴과 유사하게 작동합니다. 가 Brush 객체에는 다음 속성이 포함됩니다.

  • 색상: 단색이거나 계층화된 효과 및 텍스처의 기반이 될 수 있습니다.
  • 크기: 고정하거나 동적 크기 조정의 기준으로 사용할 수 있습니다.
  • Family: 텍스트 서체와 마찬가지로, Family는 획의 전반적인 스타일을 정의합니다.
  • Epsilon: 획의 벡터 도형에서 세부 수준을 제어하며 시각적 구분의 가장 작은 단위를 나타냅니다.

epsilon 속성은 좌표계의 정밀도를 정의하는 데 중요한 역할을 합니다. 추가 안내 Brush API 섹션에서 적절한 엡실론 값을 선택합니다.

BrushFamily는 다음과 같은 역할을 합니다. 획을 자세히 살펴보지 않고도 표현력이 좋은 획을 만들 수 있는 사용할 수 있습니다. 이 라이브러리는 압력 감지 펜, 형광펜, 마커를 비롯한 사전 정의된 StockBrushes 집합을 제공합니다.

작성

Authoring 모듈을 사용하면 개발자가 사용자 터치 입력을 캡처하여 화면에서 지연 시간이 짧은 스트로크를 실시간으로 이는 InProgressStrokesView 클래스 는 모션 이벤트를 처리하고 획이 그려질 때 스트로크를 시각화합니다.

획이 완료되면 모듈은 onStrokesFinished() 콜백 InProgressStrokesFinishedListener 콜백을 사용하면 애플리케이션이 렌더링 또는 저장을 위해 완료된 획 데이터를 검색할 수 있습니다.

렌더링

렌더링 모듈은 Android Canvas에 잉크 획을 그리는 프로세스를 간소화합니다. 모듈 CanvasStrokeRenderer를 제공합니다. Compose 및 ViewStrokeRenderer 두 가지 모두 렌더링 성능을 최적화하고 고화질 이미지를 제공해야 합니다

캔버스에 획을 렌더링하려면 create() 메서드를 사용하여 CanvasStrokeRenderer 인스턴스를 가져옵니다. 그런 다음 draw() 메서드를 사용하여 완료된 스트로크나 진행 중인 획을 렌더링할 수 있습니다. 획을 캔버스에 적용하기 때문입니다.

캔버스는 획 그리기의 일부로 변환(화면 이동, 확대/축소 또는 회전)할 수 있지만 획이 화면에 가장 잘 그려지도록 하려면 캔버스에 적용된 변환도 CanvasStrokeRenderer#draw()에 전달해야 합니다. 이를 별도로 추적하지 않아도 되도록 하려면 대신 ViewStrokeRenderer를 사용하세요.