2011-01-22 10 views
19

मैं एंड्रॉइड प्राप्त करने की कोशिश कर रहा हूं, एक गतिविधि की पृष्ठभूमि छवि को छोड़ने के लिए - अभी तक सफलता के बिना। मुझे कोई संकेत नहीं है कि क्या गलत है।एंड्रॉइड: dither = "true" नहीं है, क्या गलत है?

यह मैं क्या किया है:

<LinearLayout android:id="@+id/AbsoluteLayout01" 
android:layout_width="fill_parent" android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:gravity="center_horizontal" 
android:background="@drawable/background_dither"> 

जहाँ मैं पृष्ठभूमि छवि के रूप @ drawable/background_dither कहा:

मेरी गतिविधि लेआउट के मूल तत्व एक LinearLayout है। drawable-HDPI निम्नलिखित सामग्री के साथ मैं में एक XML फ़ाइल "background_dither.xml" डाल:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/backimg" 
android:src="@drawable/background" 
android:dither="true" 
android:antialias="true" /> 

drawable-hdpi में वास्तविक छवि background.png संदर्भ देता है। छवि, जिसमें एक बड़ा रंग ढाल शामिल है, दिखाता है, लेकिन भारी रंग बैंडिंग के साथ। मैंने एसडीके से जो सीखा है, उससे एंड्रॉइड निर्दिष्ट करने के साथ-साथ प्रॉक्सी छवि परिभाषा का उपयोग करके इसे कम किया जा सकता है: dither = "true"। हालांकि, इसका कोई प्रभाव नहीं है।

काम करने के लिए मुझे क्या याद आ रही है?

EDIT: अपलोड sources here

EDIT2: सुझाव दिया तरीकों में से कोई भी रंग बैंडिंग से छुटकारा पाने के, this blog post from Romain Guy पढ़ने के बाद मदद की बाद मैं विचार है कि क्या मेरी पीएनजी पृष्ठभूमि एक अल्फा चैनल है की जाँच करने के लिए किया था। ऐसा नहीं हुआ एक जोड़ने के बाद, एंड्रॉइड वास्तव में आरजीबी 8888 का उपयोग करता प्रतीत होता है, जैसा कि पोस्ट में कहा गया है और बैंडिंग चला गया है (2.2 के लिए भी)। अभी भी सोच रहा है कि अन्य तरीकों का काम क्यों नहीं हुआ।

EDIT3: किसी को यह सुनिश्चित करना है कि पीएनजी न केवल अल्फा चैनल है, बल्कि कम से कम एक पिक्सेल जिसमें अल्फा मान है! = एफएफ, अन्यथा एंड्रॉइड बिल्ड टूल्स फिर से उस बिटमैप को अनुक्रमित करने के लिए स्ट्रिप करेंगे अल्फा चैनल के बिना पैलेट।

उत्तर

0

एक ही समस्या वाले बहुत से लोगों की रिपोर्ट है कि जावा कोड में आपके ड्रॉ करने योग्य संसाधन पर सेट (सत्य) सेट करने पर एक्सएमएल विशेषता नहीं होती है। इस मामले में, यदि आप ऑनरेट विधि में अपने LinearLayout का संदर्भ प्राप्त कर सकते हैं, तो

linearLayout.getBackground() सेट करें (सत्य)।

एक वैकल्पिक एक अलग पिक्सेल प्रारूप सेट करने का प्रयास करने के लिए यहां दिए गए अनुसार होगा:

http://stuffthathappens.com/blog/2010/06/04/android-color-banding/

गुड लक!

+0

धन्यवाद। दोनों विकल्पों की कोशिश की। उनमें से न तो प्रतिपादन बदल सकता है इसलिए मुझे लगता है कि यह अभी भी काम नहीं करता। :-( – machtnix

3

सिर्फ super.onCreate() के बाद इस लाइन

getWindow().setFormat(PixelFormat.RGBA_8888); 

रख दिया और देखें कि क्या वह मदद करता है की कोशिश करें।

+1

धन्यवाद, लेकिन खेद, नहीं, नहीं कोई फर्क देखा था। मैं कोड यहाँ http://rapidshare.com/files/444144083/lottofee.zip अपलोड हो सकता है कि कोई समस्या पहचान सकते हैं। – machtnix

+0

कोई अंतर नहीं :( –

23

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

+0

यह सही जवाब है। धन्यवाद, यह मेरे लिए एक बहुत :) –

+0

यह मेरे लिए काम किया मदद की, धन्यवाद! –

+0

Dude, आप रॉक, धन्यवाद! – tokudu

0

एंड्रॉइड 2.2.1 और नीचे एक बग है जो फिल्टरिंग सक्षम होने पर डाइटिंग को अक्षम करने का कारण बनता है। एंड्रॉइड 2.3.3 और 3.0 पर यह समस्या ठीक लगती है।मुझे यकीन है कि अगर एक ही antialias के लिए सच हो सकता है के रूप में आप सक्षम नहीं कर रहा हूँ।

2

मुझे यह समस्या भी थी, मैंने बैकग्राउंड छवि में नौ-पैच सुविधा लागू करने के लिए तय किया।

आशा है कि यह सहायता

संबंधित मुद्दे