Android 触摸时更改自定义视图的背景

Android 触摸时更改自定义视图的背景,android,view,Android,View,我想在按下customView时更改其背景色,并在视图失去“按下状态”时稍微“删除”此背景色。然而,我在谷歌上搜索了这个问题,并使用StateListDrawable找到了一个解决方案。我在我的customView中尝试过这一点(它是以编程方式添加到ListView的),但只是将“普通颜色”设置为我的视图。当我触摸风景时,什么也没发生。怎么了 选择器xml文件: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:and

我想在按下customView时更改其背景色,并在视图失去“按下状态”时稍微“删除”此背景色。然而,我在谷歌上搜索了这个问题,并使用StateListDrawable找到了一个解决方案。我在我的customView中尝试过这一点(它是以编程方式添加到ListView的),但只是将“普通颜色”设置为我的视图。当我触摸风景时,什么也没发生。怎么了

选择器xml文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_pressed="true" 
        android:drawable="@color/bckgr" />
    <item 
        android:drawable="@color/transparent" />
</selector>

您必须将您的
背景应用于
视图
适配器
填充的
视图(您的
getView
实现正在返回的视图)而不是
ListView
self

尝试在
ListView
上将视图设置为true。您是否正在使视图可聚焦和可点击,在构造函数中使用:

setClickable(true);
setFocusable(true);

可能是您的视图没有获得焦点。

您需要设置
OnTouchListener
来处理触摸事件。当触摸视图时,更改背景,当视图“未触摸”时,将背景更改回原始状态

要设置侦听器,请使用您创建的OnTouchListener调用自定义视图的View.setOnTouchListener()函数来处理这些事件

以下是对OnTouchListener的引用:


我设想您有一个对
OnTouch()
方法的重写方法,我要做的是创建一个
实例变量
(类变量),它将保存您想要作为背景的图像,并将其设置在
OnTouch()
方法中。然后,重写您的
OnDraw()
方法,该方法将为您提供对
canvas
的引用,并使用
canvas.DrawBitmap()
绘制背景

此答案显示了有关如何绘制
位图的更多详细信息

setClickable(true);
setFocusable(true);