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