ListView,标记用户触摸的位置

时间:2012-08-02 12:28:59

标签: android

我有一个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;
        }

    });

我遇到了一个奇怪的问题:当用户抓住一个项目并将手指拖动到列表视图中的下一个项目时,前一个项目将保留颜色,因为应用程序认为我尝试从中选择多个项目列表。那么,如果用户按住手指并在列表中上下拖动,我该如何删除颜色?

希望你们明白我想要完成的事情。

3 个答案:

答案 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的项目使用相同的选择器。