5
描画可能なアルファ値を押したときに変更したい。 したがって、2つのドロウアブルを作成し、それらをStateListDrawableに入れ、押した状態のアルファ値を設定します。しかし、それは動作しません。StateListDrawableでdrawableのアルファ値を設定する方法は?
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);
更新: 私の最終的な解決策は、このようなBitmapDrawableのサブクラスを作成 とonStateChange()
方法でアルファ値を変更することです。
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のために働いていた、私はちょうど同じ問題をヒット!私はそれを修正すればあなたにお知らせしようとします! –
助けてくれました。 Drawableを拡張する場合は、@Overrideも必要です。 public boolean isStateful(){ return true; } –