MotionEvent.ACTION_UP和/或ACTION_MOVE并不总是触发

时间:2015-12-04 03:01:35

标签: android action motionevent

我有一个带有一系列linearlayout textviews的ScrollView。当用户“触摸”其中一个文本视图时,我暂时更改背景颜色以“显示”触摸,以便他们可以直观地确认他们触摸的项目。当他们抬起手指时,我将背景颜色改回默认颜色。

我遇到的问题是,如果用户滚动,则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()测试。

如何修复此问题,以便在触摸解除后,背景颜色始终会恢复为默认状态...是否滚动?

1 个答案:

答案 0 :(得分:1)

有一种简单的方法:

布局:

<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>