我有一个listview
setOnTouchListener
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
view.setBackgroundColor(Color.parseColor("#f47920"));
break;
case MotionEvent.ACTION_UP:
view.setBackgroundColor(Color.TRANSPARENT);
break;
}
return false;
}
});
我遇到了一个奇怪的问题:当用户抓住一个项目并将手指拖动到列表视图中的下一个项目时,前一个项目将保留颜色,因为应用程序认为我尝试从中选择多个项目列表。那么,如果用户按住手指并在列表中上下拖动,我该如何删除颜色?
希望你们明白我想要完成的事情。
答案 0 :(得分:3)
你的案子有什么看法?它是单个列表项还是主列表视图? 如果是列表视图,那么尝试处理案例
case MotionEvent.ACTION_MOVE :
//Check position here, if it is out of your view, then change the color back.
答案 1 :(得分:3)
在你的情况下,你需要ACTION_UP或ACTION_DOWN事件而不是ACTION_MOVE,所以为了避免ACTION_MOVE,你可以这样做:
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
isDown = false;
}
if(event.getAction() == MotionEvent.ACTION_UP && !isDown)
{
// action you want to perform
}
if(event.getAction() == MotionEvent.ACTION_MOVE)
{
isDown = true;
}
就改变颜色而言,您可以将先前视图存储在全局变量中,并且在进行下一次触摸时,您可以将该全局视图颜色更改为正常。
答案 2 :(得分:1)
如果要在点击/触摸时突出显示ListView项目,最好使用选择器而不是覆盖OnTouchListener()。
如果要设置颜色,则需要StateListDrawable。您可以使用android:listSelector属性在列表中设置它,以XML格式定义drawable:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_focused="true"
android:drawable="@drawable/item_disabled" />
<item android:state_pressed="true"
android:drawable="@drawable/item_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/item_focused" />
</selector>
或者您可以对ListView的项目使用相同的选择器。