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

问题描述:

我想在按下时更改自定义视图的背景颜色,并在视图丢失“按下状态”时稍微“移除”此背景颜色。然而,我GOOGLE了这个问题,并找到了一个使用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> 

我的自定义视图的构造函数中:

this.setBackgroundResource(R.drawable.list_item_bckgr); 

你必须申请你backgroundViewAdapter填满(视图您getView执行正在返回)不到ListView自我

尝试设置android:descendantFocusabilityListView

嘿你做在构造函数中视图focussable和点击,使用:

setClickable(true); 
setFocusable(true); 

可能是你的观点并没有得到焦点。

+0

这工作得很好:) THX – user2224350 2013-04-21 08:59:18

+0

高兴,这有助于更多的细节:) – 2013-04-21 15:55:09

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

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

下面是引用OnTouchListener:

http://developer.android.com/reference/android/view/View.OnTouchListener.html

我假设你有一个覆盖方法的OnTouch()方法,我会做的就是创建一个instance variable(类VAR),将持有的图像您希望将其作为背景,并将其设置为您的OnTouch()方法。然后,覆盖您的OnDraw()方法,该方法将为您提供canvas的参考,并使用canvas.DrawBitmap()绘制背景。

这个答案告诉您如何绘制bitmap Setting background image in a custom view