触摸项目时如何设置自定义背景颜色?

时间:2012-10-04 21:51:53

标签: java android background-color

我基本上想要在触摸时自定义列表项的背景颜色。我厌倦了写一个听众,但它接触到我犯了某种错误或误解了这些行为的概念。

v.setOnTouchListener( new TextView.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.setBackgroundColor(Color.RED); 
                    break;
            case MotionEvent.ACTION_UP:
                v.setBackgroundColor(Color.WHITE);
                break;
            }

    return false;
    }
}
);

默认颜色为浅蓝色。我想为每个列表项更改它。 此代码在触摸时将项目颜色更改为红色,但在此之后不会更改。

3 个答案:

答案 0 :(得分:5)

但也许最好的方法是使用颜色状态...在颜色文件夹中创建一个文件mycolors.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true"
              android:color="#ff0000"/> <!-- pressed -->
        <item android:color="#ffffff"/> <!-- default -->
    </selector>

然后你将如下设置视图的背景:android:background =“@ color / mycolors”在布局xml中或以编程方式如下:v.setBackgroundColor(getResources()。getColor(R.color.mycolors) ;

在这种情况下,不需要点击或触摸听众。一切都会神奇地发生。

更多信息:http://developer.android.com/guide/topics/resources/color-list-resource.html

答案 1 :(得分:1)

您是否也试图抓住ACTION_CANCEL

因此...

...
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
    v.setBackgroundColor(Color.WHITE);
     break;
...

我认为ListView正在拦截触摸事件,因为它开始滚动。所以你永远不会采取行动而是取消行动(我假设)。

答案 2 :(得分:-1)

使用statelistdrawable。你可以找到所有的例子,包括Android开发者网站。