87

ListView に線形グラデーションを適用しようとしています。これは私の描画可能な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"

動作しますが、エミュレーターと実際のデバイスでも非常に「縞模様」に見えます。

この「動作」を減らす方法はありますか?

4

7 に答える 7

86

ロマン・ガイが示唆するように:

listView.getBackground().setDither(true);

私の問題を解決します

特に AMOLED および/または hdpi デバイスでこれが十分でない場合は、これを試してください。

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}
于 2010-05-28T19:50:47.803 に答える
40

Drawable オブジェクトでディザリングを有効にするだけです。

于 2010-05-28T17:36:05.397 に答える
9

これをアクティビティに入れます:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}
于 2011-06-10T18:03:14.393 に答える
5

ディザと RGBA_888 の設定が一部の携帯電話で役に立たない場合、解決策は要素layerTypeをに設定しsoftware、ハードウェア アクセラレーションを無効にすることです。

android:layerType="software"

これにより、Samsung S5 電話での問題が解決されました。

于 2015-03-17T16:11:10.963 に答える
4

私にとってHTCDesireはこのように機能します

window.getDecorView().getBackground().setDither(true);
于 2011-06-11T08:19:31.610 に答える