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. classMyGestureDetectorextendsSimpleOnGestureListener{
  2. @Override
  3. publicbooleanonFling(MotionEvente1,MotionEvente2,
    floatvelocityX,floatvelocityY){
  4. }

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

  1. privatestaticfinalintSWIPE_MIN_DISTANCE=120;
  2. privatestaticfinalintSWIPE_MAX_OFF_PATH=250;
  3. privatestaticfinalint
    SWIPE_THRESHOLD_VELOCITY=200;

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

  1. if(e1.getX()-e2.getX()>SWIPE_MIN_DISTANCE&&Math.abs
    (velocityX)
    >SWIPE_THRESHOLD_VELOCITY){
  2. viewFlipper.setInAnimation(slideLeftIn);
  3. viewFlipper.setOutAnimation(slideLeftOut);
  4. viewFlipper.showNext();
  5. }elseif(e2.getX()-e1.getX()>SWIPE_MIN_DISTANCE&&
    Math.abs(velocityX)
    >SWIPE_THRESHOLD_VELOCITY){
  6. viewFlipper.setInAnimation(slideRightIn);
  7. viewFlipper.setOutAnimation(slideRightOut);
  8. viewFlipper.showPrevious();
  9. }
  10. if(e1.getX()-e2.getX()>SWIPE_MIN_DISTANCE&&
    Math.abs(velocityX)
    >SWIPE_THRESHOLD_VELOCITY){
  11. viewFlipper.setInAnimation(slideLeftIn);
  12. viewFlipper.setOutAnimation(slideLeftOut);
  13. viewFlipper.showNext();
  14. }elseif(e2.getX()-e1.getX()>SWIPE_MIN_DISTANCE&&
    Math.abs(velocityX)
    >SWIPE_THRESHOLD_VELOCITY){
  15. viewFlipper.setInAnimation(slideRightIn);
  16. viewFlipper.setOutAnimation(slideRightOut);
  17. viewFlipper.showPrevious();
  18. }

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

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

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

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

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

  1. @Override
  2. publicbooleanonTouchEvent(MotionEventevent){
  3. if(gestureDetector.onTouchEvent(event))
  4. returntrue;
  5. else
  6. returnfalse;
  7. }

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

更多相关文章

  1. Android(安卓)UI目录
  2. [置顶] Android(安卓)65K问题之Multidex原理分析及NoClassDefFou
  3. Android(安卓)Unit Test学习
  4. android关于多dex打包的理解
  5. Android(安卓)强大的开发支持库组件AppFromwork框架详解
  6. Android实现在一个activity中添加多个listview的方法
  7. 通过对inflate与 findViewById 方法的探究深度了解一下Android
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android Studio 以及 Eclipse(1)--Module
  2. Android开发常用知识总结
  3. Android Layout 中 include merge 标签
  4. android opengl es入门系列
  5. Android中的使用ListView控件显示List集
  6. android实现淡入淡出欢迎界面
  7. android stack-trace分析
  8. ART登场,Android要和核心虚拟机Dalvik说再
  9. 百度笔试题
  10. Android(安卓)LazyList 从网络获取图片并