Ink API는 모듈화되어 있으므로 필요한 것만 사용할 수 있습니다.
획
strokes 모듈은 Ink API의 기반 역할을 합니다. 이 모듈의 주요 데이터 유형은 다음과 같습니다.
StrokeInputBatch: 위치, 타임스탬프, 압력, 기울기, 방향(선택사항)을 비롯한 일련의 포인터 입력을 나타냅니다.InProgressStroke: 활성 상태로 그려지고 있는 획을 나타냅니다.InProgressStroke는 지연 시간이 짧은 부분 획을 렌더링하고 입력이 완료되면 최종Stroke를 빌드하는 데 사용되며, 그 후 객체를 재사용할 수 있습니다.InProgressStroke는InProgressStrokes컴포저블에서 사용됩니다.Stroke: 고정된 형상이 있는 최종 획의 변경할 수 없는 표현입니다. 각Stroke에는ImmutableStrokeInputBatch(입력 포인트),Brush(스타일),PartitionedMesh(기하학적 도형)이 있습니다. 애플리케이션 내에서 획을 저장하고, 조작하고, 렌더링할 수 있습니다.
도형
Geometry 모듈은 교차 감지 및 변환을 비롯하여 기본 도형 (Box 및 Vec과 같은 전용 클래스 사용)과 임의 도형 (PartitionedMesh 사용)에 관한 기하학적 작업을 지원합니다. PartitionedMesh는 렌더링을 지원하기 위해 추가 데이터를 보유할 수도 있습니다.
브러시
brush 모듈은 획의 스타일을 정의합니다. 다음 두 가지 주요 부분으로 구성됩니다.
Brush: 기본 색상, 기본 크기,BrushFamily을 비롯한 획의 스타일을 지정합니다.BrushFamily는 글꼴 모음과 유사하며 획의 스타일을 정의합니다. 예를 들어BrushFamily는 특정 스타일의 마커나 형광펜을 나타낼 수 있으므로 크기와 색상이 다른 획이 해당 스타일을 공유할 수 있습니다.StockBrushes: 바로 사용할 수 있는BrushFamily인스턴스를 생성하는 팩토리 함수를 제공합니다.
작성
Compose 작성 모듈을 사용하면 사용자 터치 입력을 캡처하고 이를 화면에 지연 시간이 짧은 획으로 실시간 렌더링할 수 있습니다. 이는 모션 이벤트를 처리하고 획이 그려질 때 이를 표시하는 InProgressStrokes 컴포저블을 통해 달성됩니다.
스트로크가 완료되면 컴포저블은 InProgressStrokesFinishedListener 콜백을 사용하여 클라이언트 애플리케이션에 알립니다. 이를 통해 애플리케이션은 렌더링 또는 저장을 위해 완료된 획을 가져올 수 있습니다.
Compose에서 InProgressStrokes는 onStrokesFinished 매개변수에서 이 콜백을 사용합니다. 완료된 스트로크를 다른 컴포저블에 전달하여 렌더링 모듈을 사용하여 화면에 커밋합니다.
렌더링
렌더링 모듈은 Android Canvas에 잉크 획을 그리는 작업을 간소화합니다.
Compose에는 CanvasStrokeRenderer를 제공하고 뷰 기반 레이아웃에는 ViewStrokeRenderer를 제공합니다. 이러한 렌더러는 렌더링 성능을 최적화하고 앤티앨리어싱을 비롯한 고품질 시각적 요소를 제공하는 데 도움이 됩니다.
획을 렌더링하려면 create() 메서드를 호출하여 CanvasStrokeRenderer 인스턴스를 가져온 다음 draw() 메서드를 호출하여 완료된 (Stroke) 획 또는 진행 중인(InProgressStroke) 획을 Canvas에 렌더링합니다.
획을 그릴 때 캔버스를 변환할 수 있습니다. 예를 들어 이동, 확대/축소, 회전 등이 있습니다. 획을 올바르게 렌더링하려면 canvas 변환을 CanvasStrokeRenderer.draw에도 전달해야 합니다.
canvas 변환을 별도로 추적하지 않으려면 대신 ViewStrokeRenderer를 사용하세요.
저장용량
저장소 모듈은 주로 StrokeInputBatch에 중점을 두어 획 데이터를 효율적으로 직렬화하고 역직렬화하는 유틸리티를 제공합니다.
이 모듈은 프로토콜 버퍼와 최적화된 델타 압축 기술을 사용하여 단순한 방법에 비해 상당한 스토리지 절감 효과를 제공합니다.
스토리지 모듈을 사용하면 획을 저장, 로드, 공유하는 작업이 간소화됩니다.