自定义LayerDrawable:从未调用onStateChange

时间:2013-11-20 07:52:35

标签: imagebutton alpha layerdrawable

我将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 个答案:

答案 0 :(得分:5)

我认为您还需要覆盖isStateful()方法。我有一个类似的问题,并添加此修复它:

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

请参阅this answer中与类似问题相关的代码。