2012-08-02 4 views
0

У меня есть обычай listview с setOnTouchListenerListView, отметьте положение, в котором пользователь прикасается

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

Что представляет собой вид в вашем случае? Является ли это отдельным списком или основным списком? Если это ListView, а затем попытаться обработать случай

case MotionEvent.ACTION_MOVE : 
//Check position here, if it is out of your view, then change the color back. 
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; 
    } 

что касается изменения цвета, вы можете сохранить предыдущее представление в глобальной переменной, и при следующем касании вы можете изменить этот общий цвет в обычном режиме.

1

Если вы хотите выделить элемент ListView при щелчке/касании, то лучше использовать селектор вместо того, чтобы переопределять OnTouchListener().

Если вы хотите установить цвет, вам понадобится StateListDrawable. Вы можете установить на свой список с помощью андроида: атрибут listSelector, определение вытяжки в XML:

<?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.

Смежные вопросы