自定义 LayerDrawable:onStateChange 从未被调用

3

我扩展了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个回答

8

我认为您还需要覆盖 isStateful() 方法。我曾经遇到过类似的问题,加上这个方法后问题得以解决:

@Override
public boolean isStateful() {
    return true;
}

请参考此答案中的代码,以解决类似问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接