Android ImageView-为其聚焦状态在顶部绘制半透明颜色?

Android ImageView-为其聚焦状态在顶部绘制半透明颜色?,android,Android,我有一个ImageView,我想要一个选择器,这样当用户点击或有焦点时,就会在ImageView内容的顶部绘制一个半透明的颜色。我不确定使用选择器是否可以做到这一点(我在过去使用静态绘图功能定义为ok) 但基本上我有一个每行都有imageview实例的listview,我想做如下事情: ImageView iv = ...; iv.setBitmapDrawable(bitmapLoadedFromInternets()); // dynamic content iv.setClickState

我有一个ImageView,我想要一个选择器,这样当用户点击或有焦点时,就会在ImageView内容的顶部绘制一个半透明的颜色。我不确定使用选择器是否可以做到这一点(我在过去使用静态绘图功能定义为ok)

但基本上我有一个每行都有imageview实例的listview,我想做如下事情:

ImageView iv = ...;
iv.setBitmapDrawable(bitmapLoadedFromInternets()); // dynamic content
iv.setClickStateOverlayColor(0x33ff0000); // ?
通常,ImageView仅通过setBitmapDrawable()获取一个可绘制文件,但选择器(1)为不同的单击状态交换可绘制文件,而我只希望绘制颜色覆盖,以及(2)关闭状态是动态位图,因此我无法从选择器定义中引用它


谢谢

如果您创建自己的
ImageView
子类,那么您就可以很容易地做到这一点。使用的方法是。像这样的东西可以做到:

public class ImageView extends android.widget.ImageView
{
    public ImageView(Context context)
    {
        super(context);
    }

    public ImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public ImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        if(event.getAction() == MotionEvent.ACTION_DOWN && isEnabled())
            setColorFilter(0x33ff0000, PorterDuff.Mode.MULTIPLY); //your color here

        if(event.getAction() == MotionEvent.ACTION_UP)
            setColorFilter(null);

        return super.onTouchEvent(event);
    }
}

然后,您可以在XML布局中使用它,只需引用它的完全限定项,如
my.package.ImageView
,而不只是
ImageView

onTouch的解决方案由于多种原因对我不起作用,但为我提供了如何操作的提示,以便它对我起作用。我刚刚重写了ImageView中的另一个方法

@Override
    public void setPressed(boolean pressed) {
        if (pressed) {
            setColorFilter(0x55000000, PorterDuff.Mode.SRC_ATOP);
        }
        else {
            clearColorFilter();
        }
        super.setPressed(pressed);
    }
这对我有用

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/grid" />
    <item>
        <selector>
            <item android:state_pressed="true">
                <color android:color="#7000" />
            </item>
        </selector>
    </item>

</layer-list>

也许您应该将触摸中止扩展到此操作:MotionEvent.ACTION\u HOVER\u EXIT MotionEvent.ACTION\u CANCEL