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

时间:2013-04-21 08:42:12

标签: android view

我希望在按下时更改customView的背景颜色,并在视图丢失“按下状态”时稍微“移除”此背景颜色。但是,我搜索了这个问题并找到了一个使用StateListDrawable的解决方案。我在我的customView(以编程方式添加到ListView)中尝试了这个,但只是将“正常颜色”设置为我的视图。当我触摸视图时没有任何反应。出了什么问题?

选择器xml-file:

<?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);

5 个答案:

答案 0 :(得分:0)

您必须将background应用于View Adapter填充(您的getView实施正在返回的视图),而不是ListView我自己

答案 1 :(得分:0)

尝试在ListView上将android:descendantFocusability设为真。

答案 2 :(得分:0)

嘿,你是否使视图具有可聚焦性和可点击性,请在构造函数中使用:

setClickable(true);
setFocusable(true);

可能是你的观点没有得到关注。

答案 3 :(得分:0)

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

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

以下是对OnTouchListener的引用:

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

答案 4 :(得分:0)

我想你有OnTouch()方法的覆盖方法,我要做的是创建一个instance variable(类var)来保存你想要作为背景的图像,并在OnTouch()方法中设置它。然后,覆盖您的OnDraw()方法,该方法会为您提供canvas的引用,并使用canvas.DrawBitmap()绘制您的背景。

此答案显示了有关如何绘制bitmap的更多详细信息 Setting background image in a custom view