मॉड्यूल

Ink API को मॉड्यूलर बनाया गया है, ताकि आप सिर्फ़ उन सुविधाओं का इस्तेमाल कर सकें जिनकी आपको ज़रूरत है.

स्ट्रोक

स्ट्रोक मॉड्यूल, Ink API का आधार है. इस मॉड्यूल में, मुख्य डेटा टाइप ये हैं:

  • StrokeInputBatch: यह पॉइंटर इनपुट की सीरीज़ को दिखाता है. इसमें उनकी पोज़िशन, टाइमस्टैंप, और ज़रूरत के मुताबिक दबाव, झुकाव, और ओरिएंटेशन शामिल होता है.
  • InProgressStroke: इससे ऐसे स्ट्रोक के बारे में पता चलता है जिसे अभी बनाया जा रहा है. InProgressStroke का इस्तेमाल, कम समय में कुछ स्ट्रोक रेंडर करने के लिए किया जाता है. साथ ही, इनपुट पूरा होने के बाद फ़ाइनल Stroke बनाने के लिए किया जाता है. इसके बाद, ऑब्जेक्ट का फिर से इस्तेमाल किया जा सकता है. `InProgressStroke का इस्तेमाल InProgressStrokesView करता है.
  • Stroke: यह फ़ाइनल किए गए स्ट्रोक का ऐसा वर्शन होता है जिसे बदला नहीं जा सकता. इसमें तय की गई जियोमेट्री होती है. हर Stroke में ImmutableStrokeInputBatch (इनपुट पॉइंट), Brush (स्टाइल), और PartitionedMesh (ज्यामितीय आकार) होता है. अपने ऐप्लिकेशन में स्ट्रोक सेव किए जा सकते हैं, उनमें बदलाव किया जा सकता है, और उन्हें रेंडर किया जा सकता है.

रेखागणित

Geometry मॉड्यूल, प्रिमिटिव शेप (Box और Vec जैसे खास क्लास का इस्तेमाल करके) के साथ-साथ आर्बिट्ररी शेप (PartitionedMesh का इस्तेमाल करके) पर ज्यामितीय कार्रवाइयों को सपोर्ट करता है. इनमें इंटरसेक्शन का पता लगाना और ट्रांसफ़ॉर्मेशन शामिल है. PartitionedMesh में रेंडरिंग के लिए, अतिरिक्त डेटा भी सेव किया जा सकता है.

ब्रश

brush मॉड्यूल, स्ट्रोक की स्टाइल तय करता है. इसके दो मुख्य हिस्से होते हैं:

  • Brush: इससे स्ट्रोक की स्टाइल के बारे में पता चलता है. इसमें बेस कलर, बेस साइज़, और BrushFamily शामिल हैं. BrushFamily, फ़ॉन्ट फ़ैमिली की तरह होता है. यह स्ट्रोक की स्टाइल तय करता है. उदाहरण के लिए, BrushFamily किसी खास स्टाइल के मार्कर या हाइलाइटर को दिखा सकता है. इससे अलग-अलग साइज़ और रंग के स्ट्रोक, उस स्टाइल को शेयर कर सकते हैं.
  • StockBrushes: इसमें फ़ैक्ट्री फ़ंक्शन दिए गए हैं. इनकी मदद से, इस्तेमाल के लिए तैयार BrushFamily इंस्टेंस बनाए जा सकते हैं.

लिखना

लेखन मॉड्यूल की मदद से, उपयोगकर्ता के पॉइंटर इनपुट को कैप्चर किया जा सकता है. साथ ही, इसे स्क्रीन पर कम समय में स्ट्रोक के तौर पर रीयल टाइम में रेंडर किया जा सकता है. यह InProgressStrokesView उपलब्ध कराता है. यह मोशन इवेंट को प्रोसेस करता है और स्ट्रोक को ड्रॉ किए जाने के दौरान दिखाता है.

स्ट्रोक पूरा होने के बाद, व्यू, क्लाइंट ऐप्लिकेशन को रजिस्टर किए गए कॉलबैक (InProgressStrokesFinishedListener) के ज़रिए सूचना देता है. कॉलबैक की मदद से, ऐप्लिकेशन रेंडरिंग या स्टोरेज के लिए पूरा किया गया स्ट्रोक वापस पा सकता है.

रेंडरिंग

रेंडरिंग मॉड्यूल की मदद से, Android Canvas पर इंक स्ट्रोक बनाए जा सकते हैं. यह कंपोज़ के लिए CanvasStrokeRenderer और व्यू के आधार पर लेआउट के लिए ViewStrokeRenderer उपलब्ध कराता है. इन रेंडरर को बेहतर परफ़ॉर्मेंस वाली रेंडरिंग के लिए डिज़ाइन किया गया है. साथ ही, ये अच्छी क्वालिटी वाले विज़ुअल डिलीवर करने में मदद करते हैं. इनमें ऐंटीएलियासिंग भी शामिल है.

स्ट्रोक रेंडर करने के लिए, create() तरीके को कॉल करें, ताकि आपको CanvasStrokeRenderer इंस्टेंस मिल सके. इसके बाद, draw() तरीके को कॉल करें, ताकि Canvas पर स्ट्रोक रेंडर किए जा सकें. ये स्ट्रोक, पूरे हो चुके (Stroke) या जारी (InProgressStroke) हो सकते हैं.

स्ट्रोक बनाते समय, कैनवस को बदला जा सकता है. उदाहरण के लिए, पैनिंग, ज़ूमिंग, और रोटेटिंग. स्ट्रोक को सही तरीके से रेंडर करने के लिए, आपको canvas ट्रांसफ़ॉर्म को CanvasStrokeRenderer.draw में पास करना होगा.

canvas ट्रांसफ़ॉर्म को अलग से ट्रैक करने से बचने के लिए, ViewStrokeRenderer का इस्तेमाल करें.

स्टोरेज

storage मॉड्यूल, स्ट्रोक डेटा को बेहतर तरीके से क्रम से लगाने और क्रम से हटाने के लिए यूटिलिटी उपलब्ध कराता है. यह मुख्य रूप से StrokeInputBatch पर फ़ोकस करता है.

यह मॉड्यूल, प्रोटोकॉल बफ़र और ऑप्टिमाइज़ की गई डेल्टा कंप्रेशन तकनीकों का इस्तेमाल करता है. इससे, सामान्य तरीकों की तुलना में स्टोरेज की काफ़ी बचत होती है.

स्टोरेज मॉड्यूल की मदद से, स्ट्रोक को आसानी से सेव, लोड, और शेयर किया जा सकता है.