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