2013-07-08 18 views
26

リストの表示項目を左にスワイプして右にスワイプできますか?リスト項目を左にスワイプして右にスワイプしますか?

もしそうなら、別の意図を開くためにアンドロイドスワイプを左または右にスクロールする方法はありますか?私はデフォルトでアンドロイドで連絡先の電話やメッセージを電話に掛けるようにしたい。私はあなたがMotionEventsACTION_DOWNのように、ACTION_MOVEUPまたはCANCELでリスト項目にOnTouchListenerとキャッチパディング、初期と現在の動きの動きを使用することができると思う

おかげ

+0

これは役立つかもしれませ:http://stackoverflow.com/questions/4139288/android-how-to-handle -right-to-left-swipe-gestures – g00dy

+1

あなたが話している連絡先は、Samsungの携帯電話にのみ適用されます。 –

答えて

52

これを試してみてください:

navigaList.setOnTouchListener(swipeDetector); 
navigaList.setOnItemClickListener(listener); 

OnItemClickListener listener = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
          long arg3) { 
     if(swipeDetector.swipeDetected()) { 
      if(swipeDetector.getAction() == Action.RL) { 

      } else { 

      } 
     }   
    }; 

SwipeDetector.java

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 
     None // when no action was detected 
    } 

    private static final String logTag = "SwipeDetector"; 
    private static final int MIN_DISTANCE = 100; 
    private float downX, downY, upX, upY; 
    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.None; 
      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) > MIN_DISTANCE) { 
       // left or right 
       if (deltaX < 0) { 
        Logger.show(Log.INFO,logTag, "Swipe Left to Right"); 
        mSwipeDetected = Action.LR; 
        return true; 
       } 
       if (deltaX > 0) { 
        Logger.show(Log.INFO,logTag, "Swipe Right to Left"); 
        mSwipeDetected = Action.RL; 
        return true; 
       } 
      } else 

       // vertical swipe detection 
       if (Math.abs(deltaY) > MIN_DISTANCE) { 
        // top or down 
        if (deltaY < 0) { 
         Logger.show(Log.INFO,logTag, "Swipe Top to Bottom"); 
         mSwipeDetected = Action.TB; 
         return false; 
        } 
        if (deltaY > 0) { 
         Logger.show(Log.INFO,logTag, "Swipe Bottom to Top"); 
         mSwipeDetected = Action.BT; 
         return false; 
        } 
       } 
      return true; 
     } 
     } 
     return false; 
    } 
} 
+11

なぜすべてのソースコードを共有しないのですか? – mehmetakifalp

関連する問題