ग्राफ़िक

एंड्रॉइड ग्राफ़िक्स एचएएल आइकन

एंड्रॉइड फ्रेमवर्क 2डी और 3डी के लिए विभिन्न प्रकार के ग्राफिक्स रेंडरिंग एपीआई प्रदान करता है जो ग्राफिक्स ड्राइवरों के निर्माता कार्यान्वयन के साथ इंटरैक्ट करता है, इसलिए यह अच्छी समझ होना महत्वपूर्ण है कि वे एपीआई उच्च स्तर पर कैसे काम करते हैं। यह पृष्ठ ग्राफ़िक्स हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) का परिचय देता है जिस पर ये ड्राइवर बनाए गए हैं। इस अनुभाग को जारी रखने से पहले, निम्नलिखित शर्तों से स्वयं को परिचित कर लें:

कैनवास (सामान्य शब्द), Canvas (एपीआई तत्व)
कैनवास एक ड्राइंग सतह है जो बिटमैप या Surface ऑब्जेक्ट के विरुद्ध वास्तविक बिट्स की कंपोज़िटिंग को संभालती है। Canvas बिटमैप, रेखाएं, वृत्त, आयत, पाठ इत्यादि के मानक कंप्यूटर ड्राइंग के तरीके हैं, और यह एक बिटमैप या सतह से बंधा हुआ है। कैनवास स्क्रीन पर 2D ऑब्जेक्ट बनाने का सबसे सरल, आसान तरीका है। बेस क्लास Canvas है।
खींचने योग्य
ड्रॉएबल एक संकलित दृश्य संसाधन है जिसका उपयोग पृष्ठभूमि, शीर्षक या स्क्रीन के अन्य भाग के रूप में किया जा सकता है। एक ड्रॉएबल को आम तौर पर किसी अन्य यूआई तत्व में लोड किया जाता है, उदाहरण के लिए पृष्ठभूमि छवि के रूप में। एक ड्रॉएबल ईवेंट प्राप्त करने में सक्षम नहीं है, लेकिन एनीमेशन ऑब्जेक्ट या छवि लाइब्रेरी जैसे उपवर्गों को सक्षम करने के लिए राज्य और शेड्यूलिंग जैसे कई अन्य गुण निर्दिष्ट करता है। कई खींचने योग्य ऑब्जेक्ट को खींचने योग्य संसाधन फ़ाइलों - XML ​​या बिटमैप फ़ाइलों से लोड किया जाता है जो छवि का वर्णन करते हैं। खींचने योग्य संसाधनों को android.graphics.drawable के उपवर्गों में संकलित किया जाता है। ड्रॉएबल्स और अन्य संसाधनों के बारे में अधिक जानकारी के लिए संसाधन देखें।
लेआउट संसाधन
एक लेआउट संसाधन एक XML फ़ाइल है जो एक गतिविधि स्क्रीन के लेआउट का वर्णन करती है। अधिक जानकारी के लिए, लेआउट संसाधन देखें।
नौ-पैच (9-पैच, नाइनपैच)
नौ-पैच एक आकार बदलने योग्य बिटमैप संसाधन है जिसका उपयोग डिवाइस पर पृष्ठभूमि या अन्य छवियों के लिए किया जा सकता है। अधिक जानकारी के लिए, नाइन-पैच देखें।
ओपनजीएल ईएस
ओपनजीएल ईएस 2डी और 3डी ग्राफिक्स रेंडर करने के लिए एक क्रॉस-प्लेटफॉर्म एपीआई है। एंड्रॉइड हार्डवेयर-त्वरित 3डी रेंडरिंग के लिए ओपनजीएल ईएस लाइब्रेरी प्रदान करता है। 2डी रेंडरिंग के लिए, कैनवास सबसे आसान विकल्प है। ओपनजीएल ईएस एंड्रॉइड नेटिव डेवलपमेंट किट (एनडीके) में उपलब्ध है। android.opengl और javax.microedition.khronos.opengles पैकेज OpenGL ES कार्यक्षमता को उजागर करते हैं।
सतह (सामान्य शब्द), Surface (एपीआई तत्व)
एक सतह मेमोरी के एक ब्लॉक का प्रतिनिधित्व करती है जो स्क्रीन पर मिश्रित हो जाती है। एक सतह ड्राइंग के लिए एक कैनवास रखती है, और परतें खींचने और Surface ऑब्जेक्ट का आकार बदलने के लिए विभिन्न सहायक तरीके प्रदान करती है। सीधे Surface क्लास के बजाय SurfaceView क्लास का उपयोग करें।
सतह दृश्य (सामान्य शब्द), SurfaceView (एपीआई तत्व)
सरफेस व्यू एक View ऑब्जेक्ट है जो ड्राइंग के लिए Surface ऑब्जेक्ट को लपेटता है, और इसके आकार और प्रारूप को गतिशील रूप से निर्दिष्ट करने के तरीकों को उजागर करता है। एक सतही दृश्य गेम या कैमरा पूर्वावलोकन जैसे संसाधन-गहन संचालन के लिए यूआई थ्रेड से स्वतंत्र रूप से आकर्षित करने का एक तरीका प्रदान करता है, लेकिन परिणामस्वरूप यह अतिरिक्त मेमोरी का उपयोग करता है। एक सतह दृश्य कैनवास और ओपनजीएल ईएस ग्राफिक्स दोनों का समर्थन करता है। SurfaceView ऑब्जेक्ट के लिए बेस क्लास SurfaceView है।
विषय
थीम गुणों का एक सेट है, जैसे टेक्स्ट आकार और पृष्ठभूमि रंग, विभिन्न डिफ़ॉल्ट डिस्प्ले सेटिंग्स को परिभाषित करने के लिए एक साथ बंडल किया गया है। एंड्रॉइड कुछ मानक थीम प्रदान करता है, जो R.style में सूचीबद्ध हैं और Theme_ से पहले हैं।
देखें (सामान्य शब्द), View (एपीआई तत्व)
एक दृश्य स्क्रीन पर एक आयताकार क्षेत्र खींचता है और क्लिक, कीस्ट्रोक और अन्य इंटरैक्शन घटनाओं को संभालता है। View क्लास किसी गतिविधि या डायलॉग स्क्रीन के अधिकांश लेआउट घटकों, जैसे टेक्स्ट बॉक्स और विंडोज़ के लिए बेस क्लास है। एक View ऑब्जेक्ट स्वयं को खींचने के लिए अपने मूल ऑब्जेक्ट ( ViewGroup देखें) से कॉल प्राप्त करता है, और अपने मूल ऑब्जेक्ट को उसके पसंदीदा आकार और स्थित के बारे में सूचित करता है, जिसका माता-पिता द्वारा सम्मान नहीं किया जा सकता है। अधिक जानकारी के लिए देखें View .
दृश्य समूह (सामान्य शब्द), ViewGroup (एपीआई तत्व)
एक दृश्य समूह बच्चों के विचारों का एक समूह बनाता है। दृश्य समूह यह तय करने के लिए ज़िम्मेदार है कि बच्चों के विचार कहाँ स्थित हैं और वे कितने बड़े हो सकते हैं, साथ ही उपयुक्त होने पर प्रत्येक को स्वयं को आकर्षित करने के लिए बुलाने के लिए भी जिम्मेदार है। कुछ दृश्य समूह अदृश्य हैं और केवल लेआउट के लिए हैं, जबकि अन्य में एक आंतरिक यूआई है, जैसे स्क्रॉलिंग सूची बॉक्स। दृश्य समूह widget पैकेज में हैं, लेकिन ViewGroup वर्ग का विस्तार करें।
पदानुक्रम देखें
एक दृश्य पदानुक्रम दृश्य और दृश्य समूह ऑब्जेक्ट की एक व्यवस्था है जो किसी ऐप के प्रत्येक घटक के लिए उपयोगकर्ता इंटरफ़ेस को परिभाषित करती है। पदानुक्रम में दृश्य समूह होते हैं जिनमें एक या अधिक बच्चों के विचार या दृश्य समूह होते हैं। आप एंड्रॉइड एसडीके के साथ आपूर्ति किए गए पदानुक्रम व्यूअर का उपयोग करके डिबगिंग और अनुकूलन के लिए दृश्य पदानुक्रम का एक दृश्य प्रतिनिधित्व प्राप्त कर सकते हैं।
वल्कन
वल्कन उच्च-प्रदर्शन वाले 3डी ग्राफ़िक्स के लिए एक कम-ओवरहेड क्रॉस-प्लेटफ़ॉर्म एपीआई है।
विजेट
एक विजेट पूरी तरह से कार्यान्वित दृश्य उपवर्गों के एक सेट में से एक है जो फॉर्म तत्वों और अन्य यूआई घटकों, जैसे टेक्स्ट बॉक्स या पॉपअप मेनू को प्रस्तुत करता है। क्योंकि एक विजेट पूरी तरह से कार्यान्वित है, यह मापने, खुद को चित्रित करने और स्क्रीन घटनाओं पर प्रतिक्रिया देने का काम संभालता है। विजेट android.widget पैकेज में हैं।
विंडो (सामान्य शब्द), Window (एपीआई तत्व)
एंड्रॉइड ऐप में, विंडो Window एब्सट्रैक्ट क्लास से प्राप्त एक ऑब्जेक्ट है जो सामान्य विंडो के तत्वों को निर्दिष्ट करता है, जैसे लुक और फील, टाइटल बार टेक्स्ट और मेनू का स्थान और सामग्री। डायलॉग और गतिविधियाँ Window ऑब्जेक्ट को प्रस्तुत करने के लिए Window क्लास के कार्यान्वयन का उपयोग करते हैं। आपको Window क्लास को लागू करने या अपने ऐप में विंडोज़ का उपयोग करने की आवश्यकता नहीं है।

ऐप डेवलपर तीन तरीकों से स्क्रीन पर चित्र बनाते हैं: कैनवास , ओपनजीएल ईएस , या वल्कन के साथ।

एंड्रॉइड ग्राफिक्स घटक

इससे कोई फर्क नहीं पड़ता कि रेंडरिंग एपीआई डेवलपर्स किस प्रकार का उपयोग करते हैं, सब कुछ एक सतह पर प्रस्तुत किया जाता है। सतह बफ़र कतार के निर्माता पक्ष का प्रतिनिधित्व करती है जिसे अक्सर SurfaceFlinger द्वारा उपभोग किया जाता है। एंड्रॉइड प्लेटफ़ॉर्म पर बनाई गई प्रत्येक विंडो एक सतह द्वारा समर्थित होती है। प्रस्तुत की गई सभी दृश्य सतहों को सरफेसफ्लिंगर द्वारा डिस्प्ले पर संयोजित किया गया है।

निम्नलिखित चित्र दिखाता है कि प्रमुख घटक एक साथ कैसे काम करते हैं:

छवि प्रतिपादन घटक

चित्र 1. सतहों को कैसे प्रस्तुत किया जाता है।

मुख्य घटकों का वर्णन नीचे दिया गया है:

छवि स्ट्रीम निर्माता

एक छवि स्ट्रीम निर्माता कुछ भी हो सकता है जो उपभोग के लिए ग्राफिक बफ़र्स का उत्पादन करता है। उदाहरणों में ओपनजीएल ईएस, कैनवस 2डी और मीडियासर्वर वीडियो डिकोडर शामिल हैं।

छवि स्ट्रीम उपभोक्ता

छवि स्ट्रीम का सबसे आम उपभोक्ता सरफेसफ्लिंगर है, सिस्टम सेवा जो वर्तमान में दृश्यमान सतहों का उपभोग करती है और विंडो प्रबंधक द्वारा प्रदान की गई जानकारी का उपयोग करके उन्हें डिस्प्ले पर संयोजित करती है। सरफेसफ्लिंगर एकमात्र सेवा है जो डिस्प्ले की सामग्री को संशोधित कर सकती है। SurfaceFlinger सतहों का एक समूह बनाने के लिए OpenGL और हार्डवेयर कंपोज़र का उपयोग करता है।

अन्य ओपनजीएल ईएस ऐप्स भी छवि स्ट्रीम का उपभोग कर सकते हैं, जैसे कि कैमरा ऐप कैमरा पूर्वावलोकन छवि स्ट्रीम का उपभोग करता है। गैर-जीएल ऐप्स भी उपभोक्ता हो सकते हैं, उदाहरण के लिए इमेजरीडर क्लास।

हार्डवेयर संगीतकार

डिस्प्ले सबसिस्टम के लिए हार्डवेयर एब्स्ट्रैक्शन। सरफेसफ्लिंगर ओपनजीएल और जीपीयू से काम को ऑफलोड करने के लिए हार्डवेयर कंपोजर को कुछ कंपोजिशन कार्य सौंप सकता है। सरफेसफ्लिंगर एक अन्य ओपनजीएल ईएस क्लाइंट के रूप में कार्य करता है। उदाहरण के लिए, जब SurfaceFlinger सक्रिय रूप से एक या दो बफर को तीसरे में संयोजित कर रहा है, तो यह OpenGL ES का उपयोग कर रहा है। इससे जीपीयू द्वारा सभी गणनाएं संचालित करने की तुलना में कंपोजिटिंग की शक्ति कम हो जाती है।

हार्डवेयर कंपोज़र एचएएल काम का दूसरा भाग संचालित करता है और सभी एंड्रॉइड ग्राफिक्स रेंडरिंग के लिए केंद्रीय बिंदु है। हार्डवेयर कंपोज़र को इवेंट का समर्थन करना चाहिए, जिनमें से एक VSYNC है (दूसरा प्लग-एंड-प्लेएचडीएमआई समर्थन के लिए हॉटप्लग है)।

ग्रालोक

छवि उत्पादकों द्वारा अनुरोधित मेमोरी को आवंटित करने के लिए ग्राफिक्स मेमोरी एलोकेटर (ग्रालोक) की आवश्यकता होती है। विवरण के लिए, ग्रालोक एचएएल देखें।

डेटा प्रवाह

एंड्रॉइड ग्राफ़िक्स पाइपलाइन के चित्रण के लिए निम्नलिखित चित्र देखें:

ग्राफ़िक्स डेटा प्रवाह

चित्र 2. एंड्रॉइड के माध्यम से ग्राफिक डेटा प्रवाह

बाईं ओर की वस्तुएं रेंडरर्स हैं जो ग्राफ़िक्स बफ़र्स का उत्पादन करती हैं, जैसे होम स्क्रीन, स्टेटस बार और सिस्टम यूआई। सरफेसफ्लिंगर कंपोजिटर है और हार्डवेयर कंपोजर कंपोजर है।

बफ़रक्यू

बफ़रक्यूज़ एंड्रॉइड ग्राफ़िक्स घटकों के बीच गोंद प्रदान करता है। ये कतारों की एक जोड़ी है जो उत्पादक से उपभोक्ता तक बफ़र्स के निरंतर चक्र में मध्यस्थता करती है। एक बार जब निर्माता अपने बफ़र्स बंद कर देते हैं, तो सरफेसफ़्लिंगर डिस्प्ले पर सब कुछ संयोजित करने के लिए ज़िम्मेदार होता है।

बफ़रक्यू संचार प्रक्रिया के लिए निम्नलिखित चित्र देखें।

बफ़रक्यू संचार प्रक्रिया

चित्र 3. बफ़रक्यू संचार प्रक्रिया

बफ़रक्यू में वह तर्क शामिल है जो छवि स्ट्रीम उत्पादकों और छवि स्ट्रीम उपभोक्ताओं को एक साथ जोड़ता है। छवि उत्पादकों के कुछ उदाहरण कैमरा एचएएल या ओपनजीएल ईएस गेम्स द्वारा निर्मित कैमरा पूर्वावलोकन हैं। छवि उपभोक्ताओं के कुछ उदाहरण सरफेसफ्लिंगर या अन्य ऐप हैं जो ओपनजीएल ईएस स्ट्रीम प्रदर्शित करते हैं, जैसे कैमरा ऐप कैमरा व्यूफ़ाइंडर प्रदर्शित करता है।

बफ़रक्यू एक डेटा संरचना है जो एक बफर पूल को एक कतार के साथ जोड़ती है और प्रक्रियाओं के बीच बफ़र्स को पारित करने के लिए बाइंडर आईपीसी का उपयोग करती है। निर्माता इंटरफ़ेस, या जो आप किसी ऐसे व्यक्ति को पास करते हैं जो ग्राफ़िक बफ़र्स उत्पन्न करना चाहता है, वह IGraphicBufferProducer ( SurfaceTexture का हिस्सा) है। बफ़रक्यू का उपयोग अक्सर अन्य कार्यों के अलावा किसी सरफेस पर रेंडर करने और जीएल उपभोक्ता के साथ उपभोग करने के लिए किया जाता है।

बफ़रक्यू तीन अलग-अलग मोड में काम कर सकता है:

सिंक्रोनस-लाइक मोड - बफ़रक्यू डिफ़ॉल्ट रूप से सिंक्रोनस-लाइक मोड में काम करता है, जिसमें निर्माता से आने वाला प्रत्येक बफर उपभोक्ता पर जाता है। इस मोड में कभी भी कोई बफ़र नहीं छोड़ा जाता है। और यदि निर्माता बहुत तेज़ है और बफ़र्स को ख़त्म करने की तुलना में तेज़ी से बनाता है, तो यह ब्लॉक हो जाएगा और मुफ़्त बफ़र्स की प्रतीक्षा करेगा।

नॉन-ब्लॉकिंग मोड - बफ़रक्यू नॉन-ब्लॉकिंग मोड में भी काम कर सकता है जहां यह उन मामलों में बफर की प्रतीक्षा करने के बजाय त्रुटि उत्पन्न करता है। इस मोड में कभी भी कोई बफ़र नहीं छोड़ा जाता है। यह एप्लिकेशन सॉफ़्टवेयर में संभावित गतिरोधों से बचने के लिए उपयोगी है जो ग्राफ़िक्स फ़्रेमवर्क की जटिल निर्भरता को नहीं समझ सकते हैं।

त्यागें मोड - अंत में, त्रुटियों को उत्पन्न करने या प्रतीक्षा करने के बजाय पुराने बफ़र्स को त्यागने के लिए बफ़रक्यू को कॉन्फ़िगर किया जा सकता है। उदाहरण के लिए, यदि जीएल रेंडरिंग को बनावट दृश्य में आयोजित किया जाता है और जितनी जल्दी हो सके ड्राइंग की जाती है, तो बफ़र्स को हटा दिया जाना चाहिए।

इस अधिकांश कार्य को संचालित करने के लिए, SurfaceFlinger एक अन्य OpenGL ES क्लाइंट के रूप में कार्य करता है। उदाहरण के लिए, जब SurfaceFlinger सक्रिय रूप से एक या दो बफर को तीसरे में संयोजित कर रहा है, तो यह OpenGL ES का उपयोग कर रहा है।

हार्डवेयर कंपोजर एचएएल बाकी आधे काम का संचालन करता है। यह HAL सभी Android ग्राफ़िक्स रेंडरिंग के लिए केंद्रीय बिंदु के रूप में कार्य करता है।