咖啡伴侶

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

          android GestureListener 手勢 多指縮放

          Posted on 2011-08-21 11:59 oathleo 閱讀(3250) 評論(0)  編輯  收藏 所屬分類: Android
          注意
          1.onDown 多指事件仍然響應成單指
          2.onScroll滑動時觸發,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時觸發,不論是touch (包括long) ,scroll
               public boolean onDown(MotionEvent e) {
               return false;
               }
              
               //Touch了還沒有滑動時觸發
               //(與onDown,onLongPress比較
               //onDown只要Touch down一定立刻觸發。
               public void onShowPress(MotionEvent e) {
               }
              
               //Touch了不移動一直Touch down時觸發
               //Touchdown后過一會沒有滑動先觸發onShowPress再是onLongPress。
               public void onLongPress(MotionEvent e) {
               }
              
               //上面這兩個函數都是在touch down后又沒有滑動(onScroll),又沒有長按(onLongPress),然后Touchup時觸發。
               /**
               * 點擊一下非常快的(不滑動)Touchup: onDown->onSingleTapUp->onSingleTapConfirmed
               *
               點擊一下稍微慢點的(不滑動)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
               * 點擊longpress ,onScroll 時 不觸發 onSingleTapUp
               */
               public boolean onSingleTapUp(MotionEvent e) {
               Log.i("onSingleTapUp", "onSingleTapUp");
               return false;
               }
              
               //Touch了滑動時觸發
               public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
               float distanceY) {
               return true;
               }
              
               //Touch了滑動一點距離后,up時觸發
               public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
               float velocityY) {
               return true;
               }
          主站蜘蛛池模板: 张家界市| 七台河市| 色达县| 无极县| 大邑县| 上林县| 锦州市| 田东县| 通山县| 邵阳市| 龙胜| 毕节市| 通榆县| 汉中市| 通化县| 漳浦县| 大悟县| 保亭| 洛川县| 东台市| 本溪市| 门头沟区| 潼南县| 衢州市| 濮阳市| 安溪县| 林口县| 镇沅| 安宁市| 晴隆县| 曲周县| 盐山县| 平江县| 育儿| 永福县| 鹤庆县| 新闻| 武陟县| 尼木县| 涿鹿县| 安龙县|