2010-05-28 11 views
80

ListView'ime doğrusal bir degrade uygulamayı deniyorum.Android: Arka plan olarak göründüğü gibi doğrusal degradeyi kullanarak bantlanmış

<?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> 

Yani benim ListView uygulayın: Bu benim çekilebilir xml içeriği

android:background="@drawable/shape_background_grey" 

O inşaat ama emülatörünüzde ve çok gerçek bir cihazda çok "bantlı" görünüyor .

Bu "davranışı" azaltmanın bir yolu var mı?

+3

Ekran görüntüsü gönderir misiniz? – CommonsWare

+18

Sadece bir güncelleme: eklemeWindow(). SetFormat (PixelFormat.RGBA_8888); \t \t getWindow() addFlags (WindowManager.LayoutParams.FLAG_DITHER); OnCreate yönteminde gibi görünüyor da hile ekranlı ekran (N1/Desire) –

+2

'@ Francesco' Harika!** Android ** ** ile ** Galaxy S ** üzerinde yardımcı oldu. Lütfen yararlı yorumunuzu bir cevaba dönüştürün, böylece insanlar bunun için oy verebilir. –

cevap

79

Romain Guy anlaşılacağı gibi:

listView.getBackground().setDither(true); 

sorunumu

çözer bu özellikle AMOLED ve/veya hdpi cihazları bu deneyin için yeterli değilse: içinde

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

Bu, android 1.6 ve üstü üzerinde çalışmıyor. Diğer yorumuma bakın –

+8

Bunu xml'de yapabilir misiniz? –

+7

"çalışmıyor" veya "şimdi çalışıyor"? Orada büyük fark var. –

38

Sadece Drawable nesnesinde dithering özelliğini etkinleştirebilirsiniz.

+1

Evet işe yarıyor! Ty çok fazla. BTW Bu özelliği çizilebilir xml tanımında kullanmaya çalıştım ancak belgeleri daha iyi okuduğumda, bu özellik yalnızca seçici öğesi için desteklenir. –

+0

Maalesef bu, Android sürümü> 1.5 sürümünde çalışmıyor. Android 1.6 ve Android 1.5 ile gerçek cihazda test ettim. Çekilebilir gradyanıma dither ekleme çalışmaz. Cihazlar hem 320 x 480 (180 ppi). Herhangi bir öneri? Tnx –

+1

'setDither()', API 23 düzeyinde kullanımdan kaldırıldı. Bu özellik artık göz ardı ediliyor. –

8

koy senin Aktivite:

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    Window window = getWindow(); 
    window.setFormat(PixelFormat.RGBA_8888); 
} 
3
useLevel = "true" gradyan üzerinde: HTC Desire Benim için

ben android ayarladığınızda bantlama kayboldu Benim için bu

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

'setDither()' 23 numaralı API seviyesinde kullanımdan kaldırıldı. Bu özellik artık yok sayıldı. –

1

gibi çalışır 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> 

Ama önce bantlama kaldırmak için çekilebilir bir "gürültü" ile bir Katman Listesi kullanarak çalıştı, yardımcı olur, ancak hala bazı bantlaşma var.

<?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> 

"noise_repeater" çekilebilir i yarattı ve

enter image description here

0

beni startColor ve endColor hem hafif şeffaf alfa kanalını ayarlamak oldu çalıştı tek şey kullanılır.

<?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> 

bu diğer SO soru bu denemek için fikrim var: android:dither=“true” does not dither, what's wrong?

1

renk taklidi ve RGBA_888 ayarı bazı telefonlarda yardımcı olmazsa, çözüm elemanını layerTypesoftware ayarlı olabilir Donanım hızlandırmayı devre dışı bırakmak için donanım hızını devre dışı bırakmak için, Samsung S5 telefonunda bu sorunumu giderdim.

+0

Benim için sorunu çözdünüz - teşekkürler! –