2013-03-14 125 views
0

時,我有一個自定義的ListView中,我已經爲每個列表項的OnTouchListener。當用戶觸摸的項目,我用TransitionDrawable改變時MotionEvent.ACTION_DOWN項目的背景顏色,並在MotionEvent.ACTION_UP使其恢復正常。定製的ListView問題與onTouch滾動

現在,當我滾動這個列表,這是在滾動行動開始觸項目改變背景顏色。我想避免這種行爲。所以,當滾動我想禁用任何背景顏色的變化。有沒有辦法做到這一點?請參閱下面的代碼:

public class ListItemOnTouchListener implements OnTouchListener { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     Context mContext = getActivity().getApplicationContext(); 
     Resources res = mContext.getResources(); 
     switch (event.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      TransitionDrawable transitionDown = (TransitionDrawable) res 
       .getDrawable(R.drawable.row_background_transition_down); 
      v.setBackgroundDrawable(transitionDown); 
      transitionDown.startTransition(350); 
      Log.d(TAG, "ACTION_DOWN"); 
      return true; 

     case MotionEvent.ACTION_UP: 
      TransitionDrawable transitionUp = (TransitionDrawable) res 
        .getDrawable(R.drawable.row_background_transition_up); 
      v.setBackgroundDrawable(transitionUp); 
      transitionUp.startTransition(1000); 
      // Get list view 
      ListView listView = getListView(); 
      int position = listView.getPositionForView((LinearLayout) v.getParent()); 
      listView.performItemClick(v, position, 0); 
      Log.d(TAG, "ACTION_UP"); 
      return true; 

     case MotionEvent.ACTION_MOVE: 
      Log.d(TAG, "ACTION_MOVE"); 
      break; 

     case MotionEvent.ACTION_CANCEL: 
      Log.d(TAG, "ACTION_CANCEL"); 
      v.setBackgroundResource(R.drawable.row_background_normal); 
      break; 
     } 
     return false; 
    } 
} 
+0

如果撤消對ACTION_UP效果不是那麼重要,那麼你可以替換成一個計時器,並使用點擊或選擇的事件? – 2013-03-14 14:46:43

+0

實際上,在ACTION_UP中改變顏色,因爲我想顯示淡化效果。另外,我在ACTION_UP中生成itemclick事件,因爲我想註冊用戶的點擊。請參閱我編輯的問題中的代碼。 – Robin 2013-03-14 15:12:29

回答

0

當用戶開始滾動時,您應該得到一個ACTION_CANCEL。抓住它並改變顏色。

+0

我已經這樣做了,但這沒有幫助。 – Robin 2013-03-14 15:16:05

+0

你是否試圖阻止它從來沒有改變顏色?這是不可能的 - 你不可能在停機時知道它是否將在未來滾動。 – 2013-03-14 15:18:05

+0

我不確定您是否看過顯示手機聯繫人列表的Android通訊錄應用程序。它正是我想要做的。如果您滾動列表,它永遠不會改變顏色。當您觸摸或點擊列表項目時,會顯示淡入淡出效果,然後打開聯繫人的詳細信息屏幕。此外雅虎郵件的Android應用程序顯示您的電子郵件在列表視圖中具有相同的行爲。 – Robin 2013-03-14 15:24:24

0

無需實現觸摸的,U可以實現onListItemClick(將工作一樣觸摸),然後在該方法ü可以編寫代碼來改變列表項感動的顏色/點擊。