इसलिए मैंने यहां से कोड का प्रयास किया: Creating an ImageView with a mask। मैं मूल और मुखौटा के रूप में निम्न छवियाँ उपयोग कर रहा हूँ:एंड्रॉइड छवि दृश्य पर मुखौटा कैसे लागू करें?
ध्यान दें कि विंडो पृष्ठभूमि काला नहीं है, लेकिन:
हालांकि, परिणाम मैं यह है होलो लाइट (जो आकाशगंगा नेक्सस पर एक बहुत पीला भूरा दिखता है, पूरी तरह से सफेद नहीं)। दूसरी छवि परिणाम है जब मुझे सूची दृश्य पर कोई आइटम चुना जाता है।
, तो इसके बजाय मैं एक ही एल्गोरिथ्म और उसके बाद का उपयोग कर एक नया बिटमैप बनाने के बजाय OnDraw() अधिभावी की छवि को देखने के लिए इसे पारित, इसे सही ढंग से ड्रॉ:
:Canvas canvas = new Canvas();
Bitmap mainImage = //get original image
Bitmap maskImage = //get mask image
Bitmap result = Bitmap.createBitmap(mainImage.getWidth(), mainImage.getHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(result);
Paint paint = new Paint();
paint.setFilterBitmap(false);
canvas.drawBitmap(mainImage, 0, 0, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(maskImage, 0, 0, paint);
paint.setXfermode(null);
imageView.setImageBitmap(result);
मैं उम्मीद परिणाम प्राप्त
नोट करें कि फीका सही तरीके से लागू है। जब चयन किया जाता है तो यह अधिक स्पष्ट होता है।
तो विंडो पृष्ठभूमि को दिखाने के बजाए इस काले पृष्ठभूमि को बनाने के लिए ImageView की ऑनड्रा विधि पर क्या चल रहा है? दिलचस्प बात यह है कि यदि मूल छवि ही कुछ पारदर्शिता है, कि पारदर्शिता सम्मान दिया जाता है उदाहरण के लिए, है:
मैं अपने आप को द्वारा यह पता लगा नहीं कर सकता। मैं इसे बिटमैप को पूर्व-निर्माण करने के बजाय ऑन ड्रा पर करने में सक्षम हूं क्योंकि यह केवल स्रोत और मुखौटा के रूप में बिटमैप्स के लिए काम करता है। मैं इसे अन्य ड्रैबल्स जैसे ग्रेडियेंट्स और ठोस रंगों के साथ करने में सक्षम होना चाहता हूं लेकिन उन मामलों पर चौड़ाई और ऊंचाई सेट नहीं है।
यहाँ एक अद्यतन है। Http://stackoverflow.com/questions/3467334/erase-bitmap-parts-using-porterduff-mode पढ़ने के बाद मैं कामकाजी उदाहरण पर उसी काले व्यवहार को पुन: उत्पन्न कर सकता हूं अगर मैं बिटमैप कॉन्फ़िगरेशन को ARGB_8888 के बजाय RGB_565 पर सेट करता हूं। मैं इस मुद्दे को डाउन विधि पर पारित कैनवास को भी सीमित कर सकता हूं। अगर मैं ऑनड्रा कैनवास का उपयोग करता हूं, तो काला सीमा दिखाई देती है।चूंकि कैनवास को पास करने के लिए पास किया गया है, जिसमें बिटमैप जुड़ा हुआ नहीं है, शायद मूल रूप से पारदर्शिता का समर्थन नहीं करता है? एक और चीज जो मैंने पाया वह यह है कि सूची दृश्य स्क्रॉल होने पर काला सीमा गायब हो जाती है। – AngraX
ठीक है। इसे पढ़ने के बाद http://stackoverflow.com/questions/5231260/android-shader-behave- अलग-in-ondrawcanvas-and-new-canvasbitmap ऐसा लगता है कि बग वास्तव में है कि मैं विंडो कैनवास पारदर्शी के पिक्सल बना रहा हूं अगर मैं उस पर लागू कैनवास पर लागू करता हूं()। और खिड़की के पीछे एक काला पृष्ठभूमि है। ऐसा लगता है कि मेरे पास अस्थायी बिटमैप का उपयोग करने और इसमें प्रस्तुत करने के अलावा कोई विकल्प नहीं है, जब तक कि मैं एक और डीएसटी मोड नहीं ढूंढ पाता। – AngraX
मैं एक समान कार्यक्षमता को लागू करने की कोशिश कर रहा हूं जहां मेरे पास छवि के साथ एक छविदृश्य है और दूसरा विह ब्लैक मास्क, स्पर्श पर इसे सर्कल में पीछे दिखाए गए चित्र दृश्य को दिखाना चाहिए, क्या आप यहां मेरी मदद कर सकते हैं? – ViVekH