自定义 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 移除一个图层

LayerDrawable 一起变化

LayerDrawable OutOfMemoryError

将 ColorFilter 应用于 LayerDrawable 内的 Drawable

LayerDrawable:这可以更有效地完成吗?