我有一个带有一系列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()
测试。
如何修复此问题,以便在触摸解除后,背景颜色始终会恢复为默认状态...是否滚动?
答案 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>