2012-09-18 124 views
1

我需要實現這樣的功能。用戶滑動留下了列表視圖的項目,另一個活動打開。當用戶開始向左滑動時,列表視圖項目的背景顏色應爲綠色,當完成滑動時,應打開新的活動並且該項目的背景顏色應變爲白色。在刷卡時更改列表視圖行的背景顏色

我有檢測我的刷卡事件SwipeDetector類:

public class SwipeDetector implements View.OnTouchListener { 

    public static enum Action { 
     LR, // Left to Right 
     RL, // Right to Left 
     TB, // Top to bottom 
     BT, // Bottom to Top 
     Start, 
     Stop, 
     None // when no action was detected 
    } 

    private static final String logTag = "SwipeDetector"; 
    private static final int MIN_DISTANCE = 100; 
    private static final float HORIZONTAL_MIN_DISTANCE = 5; 
    private static final float VERTICAL_MIN_DISTANCE = 100; 
    private float downX, downY, upX, upY , stopX, stopY; 
    private Action mSwipeDetected = Action.None; 

    public boolean swipeDetected() { 
     return mSwipeDetected != Action.None; 
    } 

    public Action getAction() { 
     return mSwipeDetected; 
    } 

    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      downX = event.getX(); 
      downY = event.getY(); 
      mSwipeDetected = Action.Start; 
      return false; // allow other events like Click to be processed 
     } 
     case MotionEvent.ACTION_MOVE: { 
      upX = event.getX(); 
      upY = event.getY(); 

      float deltaX = downX - upX; 
      float deltaY = downY - upY; 

      // horizontal swipe detection 
        if (Math.abs(deltaX) > HORIZONTAL_MIN_DISTANCE) { 
         // left or right 
         if (deltaX <= 0) { 
          Log.i(logTag, "Swipe Left to Right"); 
          mSwipeDetected = Action.LR; 
          return true; 
         } 
         if (deltaX > 0) { 
          Log.i(logTag, "Swipe Right to Left"); 
          mSwipeDetected = Action.RL; 
          return true; 
         } 
        } else 

        // vertical swipe detection 
        if (Math.abs(deltaY) > VERTICAL_MIN_DISTANCE) 
        { 
         // top or down 
         if (deltaY < 0) { 
          Log.i(logTag, "Swipe Top to Bottom"); 
          mSwipeDetected = Action.TB; 
          return false; 
         } 
         if (deltaY > 0) 
         { 
          Log.i(logTag, "Swipe Bottom to Top"); 
          mSwipeDetected = Action.BT; 
          return false; 
         } 
        } 
        Log.i("delta X", Float.toString(deltaX)); 
        return true; 
     } 
     case MotionEvent.ACTION_UP: 
     { 

      stopX = event.getX(); 
      stopY = event.getY(); 
      float stopValue = upX-stopX; 

      Log.i("StopX value",Float.toString(stopValue)); 
       Log.i("StopX value",Float.toString(stopX)); 
       Log.i("DownX value",Float.toString(downX)); 
       Log.i("UpX value",Float.toString(upX)); 
       // 
       mSwipeDetected = Action.None; 
      return false; 
     } 


     } 
     return false; 
    } 
} 

,我如何使用它在我的活動:

listView1.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
      { 
        if (swipeDetector.getAction()== swipeDetector.getAction().LR) 
        { 
         Log.i("start value", "it might be started"); 
         view.setBackgroundColor(Color.GREEN); 
        Log.i("Swipe Action", getAction().toString()); 
        Object listItem = listView1.getItemAtPosition(position); 
        Intent i = new Intent(getApplicationContext(), 
          InteractionsActivity.class); 
        startActivity(i); 

        } 
        else if(!swipeDetector.swipeDetected()) 
        { 
         Log.i("stop value", "it was stoped"); 
         view.setBackgroundColor(Color.WHITE); 
        } 
      } 
     }); 

但當評論我SwipeDetector case MotionEvent.ACTION_UP:語句行mSwipeDetected = Action.None;,活動打開正確,但是當我返回活動時,listview項目的背景色保持爲綠色,並且我的Activity else if語句中的Log.i("stop value", "it was stoped");:不能被調用。當我取消註釋時,可以調用Log.i("stop value", "it was stoped");,但listview項目的背景色保持白色,並且新的Activity未打開。我應該如何實現它?

回答