Mô-đun

Ink API được mô-đun hoá nên bạn chỉ có thể sử dụng những gì mình cần.

Nét vẽ

Mô-đun Vết vẽ đóng vai trò là nền tảng của thư viện Ink, cung cấp giao diện API chính và chứa các loại dữ liệu cốt lõi để tương tác với thư viện. Các loại dữ liệu chính trong mô-đun này bao gồm:

  • StrokeInputBatch: Biểu thị một chuỗi dữ liệu đầu vào của con trỏ, bao gồm vị trí, dấu thời gian và áp lực, độ nghiêng và hướng (không bắt buộc). Bạn có thể sử dụng dữ liệu này với các lớp Stroke hoặc InProgressStroke và đây là loại dữ liệu sẽ cung cấp dữ liệu đầu vào cho thư viện nhận dạng chữ viết tay.
  • Stroke: Một bản trình bày không thể thay đổi của nét vẽ đã hoàn tất với hình học cố định. Nét vẽ bao gồm một ImmutableStrokeInputBatch (điểm đầu vào), một Brush (tạo kiểu) và PartitionedMesh (hình dạng hình học). Bạn có thể lưu trữ, thao tác và kết xuất các nét vẽ trong ứng dụng.
  • InProgressStroke: Một đối tượng có thể thay đổi tương ứng với Stroke được thiết kế để xử lý đầu vào gia tăng và kết xuất theo thời gian thực trong quá trình vẽ. Mặc dù thường được sử dụng gián tiếp thông qua InProgressStrokesView! InProgressStroke có thể được tận dụng trực tiếp để tuỳ chỉnh nâng cao.

Hình học

Mô-đun Hình học cung cấp một tập các dữ liệu hình học nguyên thuỷ cho cả cơ bản và phức tạp cùng với các thao tác để phát hiện nút giao và chuyển đổi. Các đối tượng gốc này tích hợp liền mạch với nét mực, giúp bạn xây dựng các tính năng như công cụ xoá toàn bộ nét vẽ và công cụ chọn vùng.

Mặc dù các lớp như BoxVec chủ yếu hỗ trợ các phép toán hình học, nhưng PartitionedMesh cũng có thể bao gồm dữ liệu dành riêng cho kết xuất.

Bút vẽ

Mô-đun Brush đóng vai trò như một cấu hình khai báo để tạo và kết xuất nét vẽ, hoạt động tương tự như phông chữ văn bản. Đối tượng Brush có các thuộc tính sau:

  • Màu sắc: Có thể là màu đồng nhất hoặc nền tảng cho các hiệu ứng xếp lớp và hoạ tiết.
  • Kích thước: Có thể cố định hoặc được dùng làm cơ sở cho việc điều chỉnh kích thước linh động.
  • Family (Bộ): Tương tự như kiểu chữ văn bản, bộ xác định kiểu tổng thể của nét vẽ.
  • Epsilon: Kiểm soát mức độ chi tiết trong hình học vectơ của nét vẽ, đại diện cho đơn vị nhỏ nhất của sự khác biệt về hình ảnh.

Thuộc tính epsilon đóng vai trò quan trọng trong việc xác định độ chính xác của hệ toạ độ. Bạn có thể xem thêm hướng dẫn về cách chọn giá trị epsilon thích hợp trong phần API Bút vẽ.

BrushFamily đóng vai trò là một cấu hình mạnh mẽ để tạo các nét vẽ biểu cảm mà không cần đi sâu vào hình học phức tạp hoặc mã kết xuất. Thư viện này cung cấp một tập hợp StockBrushes, bao gồm bút cảm ứng lực, bút đánh dấu và bút đánh dấu.

Hoạt động ghi nhận quyền tác giả

Authoring cho phép các nhà phát triển thu thập dữ liệu đầu vào bằng cách chạm của người dùng và kết xuất nó dưới dạng các nét vẽ có độ trễ thấp trên màn hình theo thời gian thực. Điều này đạt được thông qua Lớp InProgressStrokesView, giúp xử lý các sự kiện chuyển động và trực quan hoá các nét vẽ khi chúng được vẽ.

Sau khi hoàn tất một nét vẽ, mô-đun sẽ thông báo cho ứng dụng khách bằng lệnh gọi lại onStrokesFinished() của InProgressStrokesFinishedListener. Lệnh gọi lại cho phép ứng dụng truy xuất dữ liệu nét vẽ đã hoàn tất để kết xuất hoặc lưu trữ.

Kết xuất

Mô-đun Kết xuất đơn giản hoá quá trình vẽ nét mực lên Canvas của Android. Mô-đun cung cấp CanvasStrokeRenderer cho Compose và ViewStrokeRenderer cho bố cục dựa trên khung hiển thị, cả hai đều tối ưu hoá hiệu suất kết xuất và đảm bảo hình ảnh chất lượng cao, bao gồm cả khử răng cưa.

Để kết xuất nét vẽ lên canvas, hãy lấy một thực thể CanvasStrokeRenderer bằng phương thức create(). Sau đó, hãy sử dụng phương thức draw() để kết xuất các nét vẽ đã hoàn tất hoặc đang diễn ra lên canvas.

Bạn có thể biến đổi canvas (di chuyển, thu phóng hoặc xoay) trong quá trình vẽ nét, nhưng để đảm bảo nét vẽ trông đẹp nhất trên màn hình, bạn cũng phải truyền phép biến đổi áp dụng cho canvas đến CanvasStrokeRenderer#draw(). Để tránh phải theo dõi riêng dữ liệu này, hãy sử dụng ViewStrokeRenderer thay thế.