咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          android GestureListener 手勢 多指縮放

          Posted on 2011-08-21 11:59 oathleo 閱讀(3244) 評論(0)  編輯  收藏 所屬分類: Android
          注意
          1.onDown 多指事件仍然響應成單指
          2.onScroll滑動時觸發(fā),e1只能獲得一個點 ,而e2卻能獲得多點。(搞不清楚為什么怎么設計)
          3.想在view上加 GestureListener
          可以使用下面的代碼:
          public class ViewerInnerTouchListener implements OnTouchListener {

              
          private GestureDetector gestureDetector;

              
          public ViewerInnerTouchListener(GAViewer viewer) {
                  gestureDetector 
          = new GestureDetector(new GestureListener(viewer));
              }

              
          public boolean onTouch(View v, MotionEvent event) {
                  gestureDetector.onTouchEvent(event);
                  
          return true;
              }

          }

              setOnTouchListener(
          new ViewerInnerTouchListener(this));

          判斷手勢:
              public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                  
          if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                      Log.i(
          "onFling""onFling");
                      
          return true// Right to left
                  } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                      
          return false// Left to right
                  }
                  
          if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
                      
          return false// Bottom to top
                  } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
                      
          return false// Top to bottom
                  }
                  
          return false;
              }


          GestureListener 的幾個方法要理解
               //Touch down時觸發(fā),不論是touch (包括long) ,scroll
               public boolean onDown(MotionEvent e) {
               return false;
               }
              
               //Touch了還沒有滑動時觸發(fā)
               //(與onDown,onLongPress比較
               //onDown只要Touch down一定立刻觸發(fā)。
               public void onShowPress(MotionEvent e) {
               }
              
               //Touch了不移動一直Touch down時觸發(fā)
               //Touchdown后過一會沒有滑動先觸發(fā)onShowPress再是onLongPress。
               public void onLongPress(MotionEvent e) {
               }
              
               //上面這兩個函數(shù)都是在touch down后又沒有滑動(onScroll),又沒有長按(onLongPress),然后Touchup時觸發(fā)。
               /**
               * 點擊一下非常快的(不滑動)Touchup: onDown->onSingleTapUp->onSingleTapConfirmed
               *
               點擊一下稍微慢點的(不滑動)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
               * 點擊longpress ,onScroll 時 不觸發(fā) onSingleTapUp
               */
               public boolean onSingleTapUp(MotionEvent e) {
               Log.i("onSingleTapUp", "onSingleTapUp");
               return false;
               }
              
               //Touch了滑動時觸發(fā)
               public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
               float distanceY) {
               return true;
               }
              
               //Touch了滑動一點距離后,up時觸發(fā)
               public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
               float velocityY) {
               return true;
               }
          主站蜘蛛池模板: 合山市| 宜都市| 唐海县| 临澧县| 井陉县| 绵阳市| 禄丰县| 宁强县| 贵州省| 化州市| 漳平市| 长治市| 科技| 门源| 恩平市| 高阳县| 洪湖市| 丰台区| 铜鼓县| 沧州市| 上栗县| 通渭县| 磐石市| 韶山市| 玛沁县| 阿拉善左旗| 新和县| 满洲里市| 望城县| 山阳县| 江达县| 宁强县| 三江| 长春市| 呼玛县| 克东县| 洪泽县| 乐亭县| 广元市| 湖口县| 津南区|