Ink API को मॉड्यूलर बनाया गया है, ताकि आप सिर्फ़ उन सुविधाओं का इस्तेमाल कर सकें जिनकी आपको ज़रूरत है.
स्ट्रोक
स्ट्रोक मॉड्यूल, Ink API का आधार है. इस मॉड्यूल में, मुख्य डेटा टाइप ये हैं:
StrokeInputBatch: यह पॉइंटर इनपुट की सीरीज़ को दिखाता है. इसमें उनकी पोज़िशन, टाइमस्टैंप, और ज़रूरत के मुताबिक दबाव, झुकाव, और ओरिएंटेशन शामिल होता है.InProgressStroke: इससे ऐसे स्ट्रोक के बारे में पता चलता है जिसे अभी बनाया जा रहा है.InProgressStrokeका इस्तेमाल, कम समय में कुछ स्ट्रोक रेंडर करने के लिए किया जाता है. साथ ही, इनपुट पूरा होने के बाद फ़ाइनलStrokeबनाने के लिए किया जाता है. इसके बाद, ऑब्जेक्ट का फिर से इस्तेमाल किया जा सकता है.InProgressStrokeका इस्तेमालInProgressStrokesकंपोज़ेबल करता है.Stroke: यह फ़ाइनल किए गए स्ट्रोक का ऐसा वर्शन होता है जिसे बदला नहीं जा सकता. इसमें तय की गई जियोमेट्री होती है. हरStrokeमेंImmutableStrokeInputBatch(इनपुट पॉइंट),Brush(स्टाइल), औरPartitionedMesh(ज्यामितीय आकार) होता है. अपने ऐप्लिकेशन में स्ट्रोक सेव किए जा सकते हैं, उनमें बदलाव किया जा सकता है, और उन्हें रेंडर किया जा सकता है.
रेखागणित
The Geometry module supports geometric operations on primitive shapes (using dedicated classes like Box and Vec), as well as arbitrary shapes (using PartitionedMesh), including intersection detection and transformation. PartitionedMesh can also hold additional data to support rendering.
ब्रश
brush मॉड्यूल, स्ट्रोक की स्टाइल तय करता है. इसके दो मुख्य हिस्से होते हैं:
Brush: इससे स्ट्रोक की स्टाइल के बारे में पता चलता है. इसमें बेस कलर, बेस साइज़, औरBrushFamilyशामिल हैं.BrushFamily, फ़ॉन्ट फ़ैमिली की तरह होता है. यह स्ट्रोक की स्टाइल तय करता है. उदाहरण के लिए,BrushFamilyकिसी खास स्टाइल के मार्कर या हाइलाइटर को दिखा सकता है. इससे अलग-अलग साइज़ और रंग के स्ट्रोक, उस स्टाइल को शेयर कर सकते हैं.StockBrushes: इसमें फ़ैक्ट्री फ़ंक्शन दिए गए हैं. इनकी मदद से, इस्तेमाल के लिए तैयारBrushFamilyइंस्टेंस बनाए जा सकते हैं.
लिखना
Compose Authoring मॉड्यूल की मदद से, उपयोगकर्ता के टच इनपुट को कैप्चर किया जा सकता है. साथ ही, इसे रीयल टाइम में स्क्रीन पर कम समय में दिखने वाले स्ट्रोक के तौर पर रेंडर किया जा सकता है. इसे InProgressStrokes कंपोज़ेबल की मदद से हासिल किया जाता है. यह मोशन इवेंट को प्रोसेस करता है और स्ट्रोक को वैसे ही दिखाता है जैसे उन्हें बनाया गया है.
स्ट्रोक पूरा होने के बाद, कंपोज़ेबल, क्लाइंट ऐप्लिकेशन को InProgressStrokesFinishedListener कॉलबैक का इस्तेमाल करके सूचना देता है. इससे ऐप्लिकेशन को रेंडरिंग या स्टोरेज के लिए, पूरे स्ट्रोक वापस पाने की अनुमति मिलती है.
Compose में, InProgressStrokes इस कॉलबैक को onStrokesFinished
पैरामीटर में लेता है. रेंडरिंग मॉड्यूल का इस्तेमाल करके, पूरे हो चुके स्ट्रोक को किसी दूसरे कंपोज़ेबल को पास करें, ताकि उन्हें स्क्रीन पर दिखाया जा सके.
रेंडरिंग
रेंडरिंग मॉड्यूल की मदद से, Android Canvas पर इंक स्ट्रोक आसानी से बनाए जा सकते हैं.
यह कंपोज़ के लिए CanvasStrokeRenderer और व्यू के आधार पर लेआउट के लिए ViewStrokeRenderer उपलब्ध कराता है. ये रेंडरर, रेंडरिंग की परफ़ॉर्मेंस को ऑप्टिमाइज़ करते हैं. साथ ही, अच्छी क्वालिटी के विज़ुअल डिलीवर करने में मदद करते हैं. इनमें ऐंटीएलियासिंग भी शामिल है.
स्ट्रोक रेंडर करने के लिए, create() तरीके को कॉल करके CanvasStrokeRenderer इंस्टेंस पाएं. इसके बाद, draw() तरीके को कॉल करके, पूरे हो चुके (Stroke) या प्रोसेस में मौजूद (InProgressStroke) स्ट्रोक को Canvas पर रेंडर करें.
स्ट्रोक बनाते समय, कैनवस को बदला जा सकता है. उदाहरण के लिए, पैनिंग, ज़ूमिंग, और रोटेटिंग. स्ट्रोक को सही तरीके से रेंडर करने के लिए, आपको canvas ट्रांसफ़ॉर्म को CanvasStrokeRenderer.draw में पास करना होगा.
canvas ट्रांसफ़ॉर्म को अलग से ट्रैक करने से बचने के लिए, ViewStrokeRenderer का इस्तेमाल करें.
स्टोरेज
डिवाइस का स्टोरेज मॉड्यूल, स्ट्रोक डेटा को बेहतर तरीके से क्रम से लगाने और क्रम से हटाने के लिए उपयोगिता उपलब्ध कराता है. यह मुख्य रूप से StrokeInputBatch पर फ़ोकस करता है.
यह मॉड्यूल, प्रोटोकॉल बफ़र और ऑप्टिमाइज़ की गई डेल्टा कंप्रेशन तकनीकों का इस्तेमाल करता है. इससे, सामान्य तरीकों की तुलना में स्टोरेज की काफ़ी बचत होती है.
स्टोरेज मॉड्यूल की मदद से, स्ट्रोक को आसानी से सेव, लोड, और शेयर किया जा सकता है.