首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android滑动手势侦测步骤介绍

2013-11-09 
Android滑动手势侦测方法介绍http://developer.51cto.com/art/201001/181289.htmAndroid滑动手势在触摸屏

Android滑动手势侦测方法介绍

http://developer.51cto.com/art/201001/181289.htm

    Android滑动手势在触摸屏电脑中是一个最为基本的操作。在这里我们会通过各种代码的解读来分析Android操作系统是如何侦测到不同的滑动手势。

    在Android手机操作系统中支持各种滑动手势的操作。我们在这里为大家介绍的方法主要就是针对这些手势如何能在Android平台中侦测出来。下面就让我们大家一起来看看Android滑动手势具体的识别方法吧。

    Android Activity跳转相关操作技巧分享Android创建sdcard详细图解Android系统信息查看方法详解Android数据库相关代码解读Android拍照实现方式概述

    ?

    Android SDK提供了一个listener类来侦测各种不同的手势:

    SimpleOnGestureListener. 你只需要实现自己所关心的手势就可以了.

    Swipe在android里面是叫Fling

    首先创建自己的一个手势detector类:

    1. class?MyGestureDetector?extends?SimpleOnGestureListener?{? ?@Override? ?
    2. public?boolean?onFling(MotionEvent?e1,?MotionEvent?e2,?
      float?velocityX,?float?velocityY)?{? ?}?

    ?

    ?

    一个Android滑动手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量:

    1. private?static?final?int?SWIPE_MIN_DISTANCE?=?120;? ?private?static?final?int?SWIPE_MAX_OFF_PATH?=?250;? ?
    2. private?static?final?int?
      SWIPE_THRESHOLD_VELOCITY?=?200;??

    ?

    ?

    然后在onFling方法中, 判断是不是一个合理的swipe动作:

    1. if(e1.getX()?-?e2.getX()?>?SWIPE_MIN_DISTANCE?&&?Math.abs
      (velocityX)?>?SWIPE_THRESHOLD_VELOCITY)?{? ?viewFlipper.setInAnimation(slideLeftIn);? ?
    2. viewFlipper.setOutAnimation(slideLeftOut);? ?viewFlipper.showNext();? ?
    3. }?else?if?(e2.getX()?-?e1.getX()?>?SWIPE_MIN_DISTANCE?&&?
      Math.abs(velocityX)?>?SWIPE_THRESHOLD_VELOCITY)?{? ?viewFlipper.setInAnimation(slideRightIn);? ?
    4. viewFlipper.setOutAnimation(slideRightOut);? ?viewFlipper.showPrevious();? ?
    5. }? ?if(e1.getX()?-?e2.getX()?>?SWIPE_MIN_DISTANCE?&&?
      Math.abs(velocityX)?>?SWIPE_THRESHOLD_VELOCITY)?{ ?
    6. viewFlipper.setInAnimation(slideLeftIn); ?viewFlipper.setOutAnimation(slideLeftOut); ?
    7. viewFlipper.showNext(); ?}?else?if?(e2.getX()?-?e1.getX()?>?SWIPE_MIN_DISTANCE?&&?
      Math.abs(velocityX)?>?SWIPE_THRESHOLD_VELOCITY)?{ ?
    8. viewFlipper.setInAnimation(slideRightIn); ?viewFlipper.setOutAnimation(slideRightOut); ?
    9. viewFlipper.showPrevious(); ?}?

    ?

    ?

    这里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:

    1. viewFlipper?=?(ViewFlipper)findViewById(R.id.flipper);? ?
    2. slideLeftIn?=?AnimationUtils.loadAnimation
      (this,?R.anim.slide_left_in);? ?slideLeftOut?=?AnimationUtils.loadAnimation
      (this,?R.anim.slide_left_out);? ?
    3. slideRightIn?=?AnimationUtils.loadAnimation
      (this,?R.anim.slide_right_in);? ?slideRightOut?=?AnimationUtils.loadAnimation
      (this,?R.anim.slide_right_out);??

    ?

    ?

    自定义的animation可以查看具体的XML, 比如从左边进来的一个动画:

    1. <?set?xmlns:android="http://schemas.
      android.com/apk/res/android">? ?<?translate?android:fromXDelta="100%p"?
      android:toXDelta="0"?android:duration="800"/>? ?
    2. <?/set>?

    ?

    当然最后不要忘记在你的Activity中override onTouch方法来获取手势action:

    1. @Override? ?public?boolean?onTouchEvent(MotionEvent?event)?{? ?
    2. if?(gestureDetector.onTouchEvent(event))? ?return?true;? ?
    3. else? ?return?false;? ?
    4. }?

    Android滑动手势的相关识别方法就为大家介绍到这里。

热点排行