ListView onTouch MotionEvent

时间:2014-07-12 19:56:53

标签: java android listview motionevent ontouch

我有一个列表ListView。为它接触写了一个处理程序。当您触摸菜单项(ACTION_DOWN)时,我正在突出显示它。当您释放项目(ACTION_UP)时 - 返回原始颜色。 问题是,如果您触摸并滚动 - 然后突出显示该项目。或者,如果您触摸并在另一个项目上移动手指。

public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
    holder.tv_name_exercise.setTextColor(Color.parseColor("#fe9503"));
    holder.tv_description_exercise.setTextColor(Color.parseColor("#ffffff"));
    holder.row.setBackgroundResource(R.drawable.list_item_bg_active);
    }
if (event.getAction()==MotionEvent.ACTION_UP) {
    holder.tv_name_exercise.setTextColor(Color.parseColor("#000000"));
    holder.tv_description_exercise.setTextColor(Color.parseColor("#666667"));
    holder.row.setBackgroundResource(R.drawable.list_item_bg);
    }}

1 个答案:

答案 0 :(得分:2)

不使用触摸处理程序,而是将文本视图设置为使用文本颜色的颜色状态列表,并将背景资源设置为可绘制的选择器。该框架将根据您查看的当前状态(例如,按下)来处理正确的资源。

RES /颜色/ exercise_color.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fe9503" />
    <item android:color="#000000"/>
</selector>

RES /抽拉/ row_bg.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/list_item_bg_active" />
    <item android:color="@drawable/list_item_bg"/>
</selector>