Basılıyken alfanın alfa değerini değiştirmek istiyorum. Bu yüzden iki tane çizim öğesi oluşturabilir ve bunları bir StateListDrawable içine yerleştirir ve basılan durum için alfa değerini ayarlar. Ama sadece işe yaramıyor.Bir StateListDrawable'da çizilebilir için alfa değeri nasıl ayarlanır?
StateListDrawable content = new StateListDrawable();
Drawable contentSelected = this.getResources().getDrawable(
R.drawable.content_background);
contentSelected.mutate().setAlpha(100);
Drawable contentNormal = this.getResources().getDrawable(R.drawable.content_background);
content.addState(new int[] { android.R.attr.state_pressed }, contentSelected);
content.addState(new int[] { android.R.attr.state_enabled }, contentNormal);
ImageButton button = (ImageButton) view.findViewById(R.id.content_thumbnail);
button.setImageDrawable(content);
Güncelleme: Benim son çözüm onStateChange()
yönteminde alfa değerini bu, gibi BitmapDrawable bir alt sınıfını oluşturup değiştirmektir.
public AlphaAnimatedDrawable(Resources res, Bitmap bitmap) {
super(res, bitmap);
this.setState(new int[] { android.R.attr.state_pressed, android.R.attr.state_selected,
android.R.attr.state_enabled });
}
private static final int PRESSED_ALPHA = 180;
private static final int REGULAR_ALPHA = 255;
@Override
protected boolean onStateChange(int[] states) {
for (int state : states) {
if (state == android.R.attr.state_pressed) {
setAlpha(PRESSED_ALPHA);
} else if (state == android.R.attr.state_selected) {
setAlpha(REGULAR_ALPHA);
} else if (state == android.R.attr.state_enabled) {
setAlpha(REGULAR_ALPHA);
}
}
return true;
}
Arg, sadece aynı sorunu vurmak benim için çalıştı! Düzeltirsem haber vereceğim! –
Yardım ettim. Drawable'ı genişletirseniz, @Override public boolean isStateful() { true değerini döndürmeniz gerekir; } –