MotionEvent.ACTION_UP and/or ACTION_MOVE 不总是开火

MotionEvent.ACTION_UP and/or ACTION_MOVE not always firing

我有一个带有一系列线性布局文本视图的 ScrollView。当用户 "touches" 这些文本视图之一时,我暂时将背景颜色更改为 "show" 触摸,以便他们可以直观地确认他们触摸的项目。当他们抬起手指时,我正在将背景颜色改回默认颜色。

我遇到了一个问题,如果用户滚动,ACTION_UP 似乎不会触发,因此 textview 的背景永远不会变回默认值。

我以为我通过向我的 TouchListener 添加 ACTION_MOVE 来修复它,这似乎更好地解决了问题,但并非总是如此。

我的代码是这样的...

mytextview.setOnTouchListener(mytouch);

连同...

private View.OnTouchListener mytouch = new View.OnTouchListener(){
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            v.setBackgroundColor(getResources().getColor(R.color.mytouchcolor));
        }
        if (event.getAction() == MotionEvent.ACTION_UP) {
            v.setBackgroundColor(getResources().getColor(R.color.mydefaultcolor));
        }
        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            v.setBackgroundColor(getResources().getColor(R.color.mydefaultcolor));
        }
        return false;
    }
}

如果我...此代码有效

如果我触摸并快速滚动(或轻弹),ACTION_UP 或 ACTION_MOVE 似乎永远不会触发(根据某些 LOG.I() 测试。

如何解决这个问题,以便在触摸被抬起后背景颜色始终恢复为默认颜色...是否滚动?

有个简单的方法:

布局中:

<TextView
        android:id="@+id/mytextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/view_selector"
        />

view_selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true" android:drawable="@mipmap/view_press"/>
<item android:drawable="@mipmap/view_default"/>

</selector>