2011-07-02 64 views

回答

6

在每行中使用GestureDetector,並將行內容本身包裝在ViewFlipper中。在滑動中,切換ViewFlipper的孩子。

我有一個ViewSwiper結合了GestureDetectorViewFlipper,但它被設計成在任一方向的工作(例如,從常規排,一個向左滑動權將切換到動作),可能會或可能不可取。但是,它應該讓你知道這可能如何工作。

+0

感謝您的回覆。 我發現了一個類似於您的解決方案。 http://goo.gl/WpFEi 第一次測試反應非常好,但結果很差。我認爲這個解決方案需要一些定製 - 但我認爲它會工作! 謝謝 – Superroot

+0

此功能適用於Android 2.1或更高版本GestureDetector? –

+0

@CodeDroid:* What *「適用於Android 2.1+ GestureDetector」? – CommonsWare

1

我做了類似你需要的東西 - 你可以找到一些關於there的信息。我在那裏做一些手動的東西,但它很好。爲了您的方便,這裏是我使用的代碼:

OnTouchListener gestureListener = new View.OnTouchListener() { 

    private int padding = 0; 
    private int initialx = 0; 
    private int currentx = 0; 
    private ViewHolder viewHolder; 

    public boolean onTouch(View v, MotionEvent event) { 

     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      padding = 0; 
      initialx = (int) event.getX(); 
      currentx = (int) event.getX(); 
      viewHolder = ((ViewHolder) v.getTag()); 
     } 

     if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      currentx = (int) event.getX(); 
      padding = currentx - initialx; 
     } 

     if (event.getAction() == MotionEvent.ACTION_UP || 
      event.getAction() == MotionEvent.ACTION_CANCEL) { 
      padding = 0; 
      initialx = 0; 
      currentx = 0; 
     } 

     if (viewHolder != null) { 
      if (padding == 0) { 
       v.setBackgroundColor(0xFF000000); 
       if (viewHolder.running) 
        v.setBackgroundColor(0xFF058805); 
      } 
      if (padding > 75) { 
       viewHolder.running = true; 
       v.setBackgroundColor(0xFF00FF00); 
       viewHolder.icon.setImageResource(R.drawable.clock_running); 
      } 
      if (padding < -75) { 
       viewHolder.running = false; 
       v.setBackgroundColor(0xFFFF0000); 
      } 
      v.setPadding(padding, 0, 0, 0); 
     } 
     return false; 
    } 
};