내 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 설정이 일부 휴대폰에서 도움이되지 않는 경우 솔루션은 요소 layerType
를 software
로 설정하여 하드웨어 가속을 비활성화하는 것입니다.
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”는 디더링되지 않습니다. 무엇이 잘못 되었습니까?