【问题标题】:MotionEvent.ACTION_UP and/or ACTION_MOVE not always firingMotionEvent.ACTION_UP 和/或 ACTION_MOVE 并不总是触发
【发布时间】:2015-12-04 03:01:34
【问题描述】:

我有一个带有一系列线性布局文本视图的 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() 测试。

如何解决此问题,以便在解除触摸后背景颜色始终返回默认值...滚动与否?

【问题讨论】:

    标签: android action motionevent


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多