[android] Android : 배경이 줄무늬로 보이도록 선형 그래디언트 사용

내 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"

작동하지만 에뮬레이터와 실제 장치에서도 매우 “줄무늬”로 보입니다.

이 “동작”을 줄일 수있는 방법이 있습니까?



답변

Romain Guy가 제안한대로 :

listView.getBackground().setDither(true);

내 문제를 해결해

이것이 특히 AMOLED 및 / 또는 hdpi 장치에 충분하지 않은 경우 다음을 시도하십시오.

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


답변

Drawable 개체에서 디더링을 활성화하기 만하면됩니다.


답변

이것을 당신의 활동에 넣으십시오.

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


답변

나를 위해 HTC Desire는 다음과 같이 작동합니다.

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


답변

나를 위해 그라디언트에 android : useLevel = “true”를 설정하면 밴딩이 사라졌습니다. 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>

하지만 먼저 “노이즈”드로어 블이있는 Layer-List를 사용하여 밴딩을 제거해 보았습니다. 도움이되지만 여전히 밴딩이 있습니다.

<?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”드로어 블

여기에 이미지 설명 입력


답변

디더링 및 RGBA_888 설정이 일부 휴대폰에서 도움이되지 않는 경우 솔루션은 요소 layerTypesoftware로 설정하여 하드웨어 가속을 비활성화하는 것입니다.

android:layerType="software"

이것은 삼성 S5 전화의 문제를 해결했습니다.


답변

나를 위해 일한 유일한 것은 startColor와 endColor 모두에 약간 투명한 알파 채널을 설정하는 것입니다.

<?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”는 디더링되지 않습니다. 무엇이 잘못 되었습니까?