自定义 LayerDrawable:onStateChange 从未调用
Posted
技术标签:
【中文标题】自定义 LayerDrawable:onStateChange 从未调用【英文标题】:Custom LayerDrawable: onStateChange never called 【发布时间】:2013-12-04 02:38:18 【问题描述】:我扩展了 LayerDrawable 以在按下我的 ImageButtons 时自动更改 Alpha 值:
protected class CustomDrawable extends LayerDrawable
protected int _pressedAlpha = 60;
public CustomDrawable(Drawable d)
Log.d(TAG, "constructor");
super(new Drawable[] d );
/**
* Wenn sich der Status auf pressed ändert, soll der Alphawert sich auf _pressedAlpha ändern. Wenn sich der
* Status von pressed wieder auf normal ändert soll der ursprüngliche Alphawert gesetzt werden
*/
@Override
protected boolean onStateChange(int[] states)
Log.d(TAG, "status changed: " + states);
boolean pressed = false;
for (int state : states)
if (state == android.R.attr.state_pressed)
pressed = true;
mutate();
if (pressed)
setAlpha(_pressedAlpha);
else
setAlpha(100);
invalidateSelf();
return super.onStateChange(states);
构造函数被调用并且 Drawable 是正确的,但是当我按下 ImageButton 时,永远不会调用 onStateChange() 方法。有人可以帮帮我吗?
【问题讨论】:
【参考方案1】:我认为您也需要覆盖 isStateful()
方法。我有一个类似的问题并添加它修复了它:
@Override
public boolean isStateful()
return true;
请参阅this answer 中的代码以解决类似问题。
【讨论】:
以上是关于自定义 LayerDrawable:onStateChange 从未调用的主要内容,如果未能解决你的问题,请参考以下文章
android使用代码生成LayerDrawable的方法和注意事项
LayerDrawable OutOfMemoryError