手势操作在我们使用智能设备的过程中奉献了不一样的体验。Android开发中必然会进行手势操作方面的编程。那么它的原理是怎样的呢?我们如何进行手势操作编程呢?

   手势操作原理首先,在Android系统中,每一次手势交互都会依照以下顺序执行。1. 接触接触屏一刹那,触发一个MotionEvent事件。2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。3. 通过GestureDetector(手势识别器)转发次MotionEvent对象至OnGestureListener。4. OnGestureListener获得该对象,听根据该对象封装的的信息,做出合适的反馈。这个顺序可以说就是手势操作的原理。手势操作类和接口下面一同来了解一下MotionEvent、GestureDetector和OnGestureListener。MotionEvent: 这个类用于封装手势、触摸笔、轨迹球等等的动作事件。其内部封装了两个重要的属性X和Y,这两个属性分别用于记录横轴和纵轴的坐标。GestureDetector: 识别各种手势。OnGestureListener: 这是一个手势交互的监听接口,其中提供了多个抽象方法,并根据GestureDetector的手势识别结果调用相对应的方法。手势操作实例下面我再通过一个切换美女图片的代码示例,演示一下手势交互的实现,让大伙对上面的执行顺序,以及各手势动作的区分有一个更加深刻的了解和记忆。首先,提供一个只有ImageView的布局文件——main.xml。

XML/HTML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">    <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center"/>
</LinearLayout>
   然后,完成我们的Activity,因为要监听触摸屏的触摸事件和手势时间,所以该Activity必须实现OnTouchListener和OnGestureListener两个接口,并重写其中的方法。具体代码如下:

Java代码

public class MainActivity extends Activity implements OnTouchListener, OnGestureListener  {    //创建一个用于识别收拾的GestureDetector对象waiyuwu.blogcn.com    private GestureDetector detector = new GestureDetector(this);    //定义一个数组,用于放漂亮的女孩    int[] girls = new int[]{R.drawable.girl1, R.drawable.girl2, R.drawable.girl3};    //定义数组下标,以方便观看各个女孩    private int index;    private ImageView image;    @Override    public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    image = (ImageView)findViewById(R.id.image);    //设置一个初始显示的girl吧    image.setImageResource(girls[index]);    //监听这个ImageView组件上的触摸屏时间    image.setOnTouchListener(this);    //下面两个要记得设哦,不然就没法处理轻触以外的事件了,例如抛掷动作。    image.setLongClickable(true);    detector.setIsLongpressEnabled(true);    }    //用于呼喊下一个女孩的方法    public void goNext(){    index++;    index = Math.abs(index % girls.length);    image.setImageResource(girls[index]);    }    //用户呼唤上一个女孩的方法    public void goPrevious(){    index--;    index = Math.abs(index % girls.length);    image.setImageResource(girls[index]);    }    //重写OnTouchListener的onTouch方法    //此方法在触摸屏被触摸,即发生触摸事件(接触和抚摸两个事件,挺形象)的时候被调用。    @Override    public boolean onTouch(View v, MotionEvent event) {    detector.onTouchEvent(event);    return true;    }    //在按下动作时被调用    @Override    public boolean onDown(MotionEvent e) {    return false;    }    //在抛掷动作时被调用    @Override    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,    float velocityY) {    //velocityX表示横向的移动,根据手指移动的方向切换女孩    if(velocityX < 0){    goNext();    }else if(velocityX > 0){    goPrevious();    }    return false;    }    //在长按时被调用    @Override    public void onLongPress(MotionEvent e) {    }    //在滚动时调用    @Override    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,    float distanceY) {    return false;    }    //在按住时被调用    @Override    public void onShowPress(MotionEvent e) {    }    //在抬起时被调用    @Override    public boolean onSingleTapUp(MotionEvent e) {    return false;    }    }   
   手势操作各个方法的含义在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了。很多常量, 属性和方法,居然连个描述都没有。没有描述也就罢了,但是OnGestureListener里手势这么多,它也没有一个介绍说明,在没有进行不断才尝试 之前,谁能搞懂onLongPress和onShowPress,onScroll和onFling的关系与差别吗?Google真的需要在文档方面做一次大手术了。不过好在经过鄙人不断反复的尝试。从个人的角度为这几个手势动作做出了定义。按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。长按(onLongPress): 手指按在持续一段时间,并且没有松开。滚动(onScroll): 手指在触摸屏上滑动。按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。抬起(onSingleTapUp):手指离开触摸屏的那一刹那。除了这些定义之外,鄙人也总结了一点算是经验的经验吧,在这里和大家分享一下。任何手势动作都会先执行一次按下(onDown)动作。长按(onLongPress)动作前一定会执行一次按住(onShowPress)动作。按住(onShowPress)动作和按下(onDown)动作之后都会执行一次抬起(onSingleTapUp)动作。长按(onLongPress)、滚动(onScroll)和抛掷(onFling)动作之后都不会执行抬起(onSingleTapUp)动作。

Android手势操作相关推荐

  1. Android 手势操作GestureDetector

    在很多应用中我们经常会看到一些不同手势的点击事件,例如QQ的消息列表,我们可以通过左滑消息来选择删除或者置顶或者标记为已读,我们也可以通过右滑拖出QQ菜单.有些应用中还会有长按,双击等手势.但是一般情 ...

  2. Android手势操作耍起来!

    目录 前言 初步了解手势操作 六个重写方法 小栗子体验一下 别忘了双击事件 最后 前言 手势操作是Android交互当中至关重要的. 可以说, 如果一个软件没有好的手势操作, 就不能将其定义为移动端的 ...

  3. android手势操作滑动效果触摸屏事件处理

    2019独角兽企业重金招聘Python工程师标准>>> 很多时候,利用触摸屏的Fling.Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scr ...

  4. android 手势操作垂直滑动,Android-水平和垂直方向都可滑动的RecycleView

    最近有点忙,项目进度跟的比较紧.最近需求那边让我们写一个左右和上下都可滑动的列表,用来展示多个Title的值.这里我把需求简化了一下.老规矩,先看图. 在看到需求的时候,有在网上看看有没有别人造好的轮 ...

  5. android touch事件坐标原点,Android onTouch事件与手势操作

    触摸,手势操作已经很好的融入了我们的生活.那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习. 先看效果图 如上 ...

  6. Android 触摸及手势操作GestureDetector

    现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘.无鼠标的手机系统带来了很多的便利.当用户触摸屏幕时会产生很多的触摸事件,down.up.move等等. ...

  7. Android之GestureDetector-简单手势操作及通过手势缩放图片,我离职后面试收割小米等大厂offer

    Android提供了手势检测,并为其提供了相应的监听器,需要用到的类是GestureDetector,其实例代表了一个手势检测器,创建GestureDetector时需要传入一个GestureDete ...

  8. 索尼xz2android设置向导,索尼为Xperia XZ2 Premium推送Android 9.0 迎来全新手势操作

    我们此前报道过,索尼曾计划于10月26日为Xperia XZ Premium,Xperia XZ1和Xperia XZ1 Compact推送Android 9.0更新,但是新系统出现了一些软件级的错误 ...

  9. android+p手势操作,手势操作哪家强:Android P对比iPhone X

    [环球网综合科技报道]据科技博客The Verge5月8日的博文称,Android P给谷歌的操作系统带来了大量的更新设计,其中最为突出的是新近推出的手势操作界面系统.很多人注意到该界面系统与苹果去年 ...

最新文章

  1. TSC打印机DLL说明
  2. 会议报名丨CSSNLP 2021第二届中国自然语言处理学生研讨会开放注册
  3. python中unique_一个神奇的Python机器学习交互应用开放框架
  4. NLTK找出最频繁的名词标记的程序(代码详细解释)
  5. 10分钟学会python函数式编程
  6. 22.Linux-块设备驱动之框架详细分析(详解)
  7. 153. Find Minimum in Rotated Sorted Array找其中的最小值
  8. Java中try-catch-finally-return的执行顺序
  9. 大型企业数据库服务首选,AliSQL这几大企业级功能你了解几个?
  10. VTN:视频Transformer网络
  11. java 图片相似度_GitHub - java51talk/image-similarity: 计算图片之间的相似度
  12. 基于springboot的在线小说阅读平台设计与实现-计算机毕业设计源码+LW文档
  13. 少儿编程 中国电子学会scratch等级考试一级历年真题解析【已更新至2023年3月 持续更新】
  14. 计算机开机出现ROM,求助电脑开机问题
  15. 默哀日、灾难日,纪念日,哀悼日等网站都变成黑白色
  16. Error: [$injector:unpr] AngularJS 注入报错
  17. 分布式存储系统——HBase
  18. java基于ssm的洗衣店管理系统
  19. Proteus仿真数字钟表电路实验报告(可下载工程文件)
  20. java初学者的建议

热门文章

  1. movielens推荐_电影推荐系统movielens grouplens
  2. Android版本对照
  3. 极速pdf文件打印时此计算机未连接到网络,极速PDF阅读器常见问题及解决方法
  4. jstack分析 (Thread state=IN_NATIVE) mark
  5. ICP算法概述以及使用SVD进行算法推导
  6. CMMI2.0之我见-管理性能和度量MPM
  7. 一个段子来解释数据挖掘
  8. 常见安防存储估算标准
  9. PR制作视频开头上下帷幕拉开效果
  10. php 时间戳与日期的转换