Android: रेखीय ढाल का उपयोग पृष्ठभूमि के रूप में बैंडेड दिखता है


85

मैं अपनी सूची दृश्य में एक रेखीय ढाल लागू करने का प्रयास कर रहा हूं। यह मेरी योग्‍य xml की सामग्री है:

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="#3A3C39" 
        android:endColor="#181818"
        android:angle="270"
     />
    <corners android:radius="0dp" />
</shape>

इसलिए मैं इसे अपने ListView के साथ लागू करता हूं:

android:background="@drawable/shape_background_grey"

यह काम करता है लेकिन यह एमुलेटर पर और वास्तविक डिवाइस पर भी बहुत "बैंडेड" दिखता है।

क्या इस "व्यवहार" को कम करने का कोई तरीका है?


18
बस एक अपडेट: getWindow () को सेट करना। setFormat (PixelFormat.RGBA_8888); । GetWindow () addFlags (WindowManager.LayoutParams.FLAG_DITHER); OnCreate विधि में लगता है कि चाल भी hdpi के लिए amoled स्क्रीन (N1 / इच्छा) के साथ है
फ्रांसेस्को लौरिता

2
@Francescoमहान! इसने एंड्रॉइड 2.2 के साथ मेरी गैलेक्सी एस पर मदद की । कृपया अपनी उपयोगी टिप्पणी को उत्तर में बदलें, ताकि लोग उसे वोट कर सकें।
java.is.for.desktop

जवाबों:


84

जैसा कि रोमेन गाई सुझाव देते हैं:

listView.getBackground().setDither(true);

मेरी समस्या हल करता है

यदि यह विशेष रूप से AMOLED और / या hdpi उपकरणों के लिए पर्याप्त नहीं है, तो यह प्रयास करें:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

यह एंड्रॉइड 1.6 और इसके बाद के संस्करण पर काम नहीं करता है। मेरी अन्य टिप्पणी देखें
फ्रांसेस्को लौरिता

8
क्या आप इसे xml में कर सकते हैं?
थॉमस अहले

@Artem मेरे मामले में, Android> = 1.6 listView.getBackground().setDither(true);अभ्यस्त काम पर, मुझे इस onAttachedToWindowपद्धति को ओवरराइड करना पड़ा ।
फ्रांसेस्को लौरिता

3
setDither () अब पदावनत हो गया है
GuillermoMP

39

आप बस अपनी आकर्षित करने योग्य वस्तु पर dithering सक्षम कर सकते हैं।


1
हाँ यह काम करता है! बहुत ज्यादा प्रयास। BTW मैंने इस संपत्ति का उपयोग करने योग्य xml परिभाषा में उपयोग करने की कोशिश की, लेकिन जैसा कि मैंने प्रलेखन में बेहतर पढ़ा है, यह गुण केवल चयनकर्ता तत्व के लिए समर्थित है।
फ्रांसेस्को लॉरिटा

दुर्भाग्य से यह एंड्रॉइड वर्जन> 1.5 पर काम नहीं करता है। मैंने एंड्रॉइड 1.6 और एंड्रॉइड 1.5 के साथ वास्तविक डिवाइस पर परीक्षण किया। मेरे ड्रिबल ग्रैडिएंट में कोई कमी नहीं है। डिवाइस दोनों 320 x 480 (180 पीपीआई) हैं। कोई उपाय? Tnx
फ्रांसेस्को लॉरिता

3
setDither()एपीआई स्तर 23 में पदावनत किया गया था। इस संपत्ति को अब नजरअंदाज कर दिया गया है।
टोट ज़म

9

इसे अपनी गतिविधि में रखें:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

3

मेरे लिए एचटीसी डिजायर इस तरह से काम करता है

window.getDecorView().getBackground().setDither(true);

1
setDither()एपीआई स्तर 23 में पदावनत किया गया था। इस संपत्ति को अब नजरअंदाज कर दिया गया है।
टोट ज़म

2

जब मैंने Android सेट किया तो मेरे लिए बैंडिंग गायब हो गई: ढाल पर प्रयोग करें = "सच": gradient_dark.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient android:startColor="#464646"
        android:endColor="#323232"
        android:angle="270"
        android:type="linear"
        android:useLevel="true"
         />
</shape>

लेकिन पहले मैंने बैंडिंग को हटाने के लिए "शोर" के साथ एक परत-सूची का उपयोग करने की कोशिश की, यह मदद करता है लेकिन अभी भी कुछ बैंडिंग है।

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/gradient_dark"/>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/noise_repeater"
            android:tileMode="repeat" />
    </item>

</layer-list>

"नॉइज़_रेपटर" ड्रॉबल मैं बनाया और इस्तेमाल किया

यहाँ छवि विवरण दर्ज करें


2

यदि कुछ फोन पर dither और RGBA_888 सेटिंग मदद नहीं करती हैं, तो समाधान हार्डवेयर सिक्योरिटी को निष्क्रिय layerTypeकरने के लिए तत्व सेट करने के लिए हो सकता हैsoftware

android:layerType="software"

इसने सैमसंग एस 5 फोन पर मेरी समस्या को ठीक कर दिया।


0

मेरे लिए काम करने वाली एकमात्र चीज स्टार्टरकल और एंडकोलर दोनों पर थोड़ा पारदर्शी अल्फा चैनल स्थापित करना था।

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="#FE3A3C39" 
        android:endColor="#FE181818"
        android:angle="270"
     />
</shape>

मुझे इस अन्य SO प्रश्न से इसे आज़माने का विचार आया: android: dither = "true" dither नहीं है, क्या गलत है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.