java - ListView onTouch 运动事件

标签 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);
    }}

最佳答案

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

res/color/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/drawable/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>

关于java - ListView onTouch 运动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716787/

相关文章:

Android Studio Pre Dexing 失败

php - 使用 PHP、PDO、MYSQL 将 Android 推送通知发送到多个设备

具有多个选择和自定义适配器的 Android ListView

java - 有没有办法让 Eclipse 按域单独导入?

java - 将字符串与数组列表中的字符串的一部分进行比较

java - rmi ejb 调用中可重用登录 session 的概念

android - ListView:drawSelectorOnTop 在主题中被忽略?

java - 在使用项目路径的同时可以使用Server.xml中的ROOT路径吗?

Android 拨号器应用程序

flutter - Flutter ListView.builder在警报对话框中不起作用