广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    android中处理各种触摸事件的方法浅谈

    2018-04-08 09:04:15 次阅读 稿源:互联网
    广告

    Android里有两个类
    android.view.GestureDetector
    android.view.GestureDetector.SimpleOnGestureListener
    (另外android.widget.Gallery好像是更牛x的OnGestureListener )
    1)
    新建一个类继承SimpleOnGestureListener,HahaGestureDetectorListener
    可以实现以下event事件。
    boolean onDoubleTap(MotionEvent e)
    解释:双击的第二下Touch down时触发
    boolean onDoubleTapEvent(MotionEvent e)
    解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。
    boolean onDown(MotionEvent e)
    解释:Touch down时触发
    boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    解释:Touch了滑动一点距离后,up时触发。
    void onLongPress(MotionEvent e)
    解释:Touch了不移动一直Touch down时触发
    boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
    解释:Touch了滑动时触发。
    void onShowPress(MotionEvent e)
    解释:Touch了还没有滑动时触发
    (与onDown,onLongPress比较
    onDown只要Touch down一定立刻触发。
    而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。
    所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。

    boolean onSingleTapConfirmed(MotionEvent e)
    boolean onSingleTapUp(MotionEvent e)
    解释:上面这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。
    点击一下非常快的(不滑动)Touchup:
    onDown->onSingleTapUp->onSingleTapConfirmed
    点击一下稍微慢点的(不滑动)Touchup:
    onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
    2)在view的新建一个GestureDetector的对象。
    构造函数里
    gestureDetector = new GestureDetector(new HahaGestureDetectorListener());
    然后在View的onTouchEvent里以下这样用,就可以在刚才1)弄的事件里写自己的代码了。
    代码如下:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    gestureDetector.onTouchEvent(event);
    }
    mTouchListener = new OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
     // TODO Auto-generated method stub
     float x = event.getXPrecision()*event.getX()+event.getX();
     float y = event.getYPrecision()*event.getY()+event.getY();
     switch (event.getAction()) {
     case MotionEvent.ACTION_DOWN:

     break;
     case MotionEvent.ACTION_MOVE:
     mTouchTimes++;
     if (mTouchTimes > TOUCH_TIMES) {
    // 根据方向计算角度
     if (mCurrentOrientation==DeviceOrientation.Landscape) {
     mAngle = Math.toDegrees(Math.atan2(y - 480 / 2, x))+90;
     } else {
     mAngle = -Math.toDegrees(Math.atan2(y - 480 / 2, 320-x))+90;
     }

     Log.w("angle", "mangle:"+mAngle);
     }
     break;
     case MotionEvent.ACTION_UP:
     if (mTouchTimes > TOUCH_TIMES) {

     } else {

     }
     mTouchTimes = 0;
     break;
     default:
     break;
     }
     return true;
     }
     };
    mView.setOnTouchListener(mTouchListener);

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告