imagebutton - 自定义LayerDrawable : onStateChange never called

标签 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() 方法。有人可以帮帮我吗?

最佳答案

我认为您也需要重写 isStateful() 方法。我有一个类似的问题并添加它修复了它:

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

查看 this answer 中的代码类似的问题。

关于imagebutton - 自定义LayerDrawable : onStateChange never called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20090253/

相关文章:

node.js - 检测 png Node 中是否有(并且实际使用)Alpha channel

android - 以编程方式将带有 LayerDrawable 的 StateListDrawable 添加到 Button 的问题

android - LayerDrawable 异常

安卓图像按钮 : how to remove tinted rectangle around image?

android - 更改 Imagebutton 的背景图像

FFMPEG 将带有 alpha channel 的 .avi/.mov 编码为 .3g2(保留 alpha)

Android ImageButton 在 Activity 中运行良好。它在 fragment 中不起作用

java - android 图像按钮内存不足

ffmpeg - 带 Alpha channel 的自适应视频编码