Android手势识别02——旋转、移动等使用第三方库

一、简要说明

通过前面一篇文章(Android手势识别01——基本手势的处理)的学习,我们知道了基本手势的使用方法。但是我们发现这里基本上手势的使用方法中,竟然没有旋转这种手势,是不是很不可思议呢?当然你也可以自己来写这种手势,其实有现成的手势库可以用了哦? 那么我们就来用用这个库

我们可以看看这个库的说明:

1.1 Containments

RotateGestureDetector

Helps finding out the rotation angle between the line of two fingers (with the

normal or previous finger positions)

MoveGestureDetector

Convenience gesture detector to keep it easy moving an object around with one

ore more fingers without losing the clean usage of the gesture detector pattern.

ShoveGestureDetector

Detects a vertical two-finger shove. (If you place two fingers on screen with less than a 20 degree angle between them,

this will detact movement on the Y-axis.)

ScaleGestureDetector (default Android)

This one is NOT in this framework, but is gesture detector that resides in the

Android API since API level 8 (2.2).

BaseGestureDetector (abstract)

Abstract class that every new gesture detector class should extend.

TwoFingerGestureDetector (abstract)

Abstract class that extends the BaseGestureDetector and that every new gesture

detector class for two finger operations should extend.

1.2 库的使用方式简要说明

这个库的使用方式和 Android原生库的使用方式一模一样。

1.创建监听的实例

2.创建手势探测器

3.重写onTouchEvent方法,这个这个方法内调用探测器的onTouchEvent()

二、RotateGestureDetector的使用

2.1 RotateGestureDetector和RotateGestureDetector.SimpleOnRotateGestureListener的简要说明

RotateGestureDetector 用处创建旋转手势的探测器。其中 getRotationDegreesDelta() 用户获取旋转的角度(单位:角度),值为一个相对值,相对与上一次旋转的角度值,即以上一次为起点。

RotateGestureDetector.SimpleOnRotateGestureListener 用于创建堂测器的监听。有三个事件

public boolean onRotate(RotateGestureDetector detector) {

return false;

}

public boolean onRotateBegin(RotateGestureDetector detector) {

return true;

}

public void onRotateEnd(RotateGestureDetector detector) {

// Do nothing, overridden implementation may be used

}

旋转开始:调用onRotateBegin,旋转过程中不停的调用onRotate,结束调用onRotateEnd

2.2 RotateGestureActivity.java

/** * Project: gesturedemo
* Create Date: 2017/4/26
* Author: qiwenming
* Description:
*/

public class RotateGestureActivity extends BaseActivity {

private View mView;

private RotateGestureDetector mRotateGestureDetector;

private float mRotationDegrees = 0.f;

private static final String TAG = "RotateGestureActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_rotate_gesture);

mView = findViewById(R.id.rotate_view);

mRotateGestureDetector = new RotateGestureDetector(this,mSimpleOnRotateGestureListener);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

mRotateGestureDetector.onTouchEvent(event);

return super.onTouchEvent(event);

}

private RotateGestureDetector.SimpleOnRotateGestureListener mSimpleOnRotateGestureListener = new RotateGestureDetector.SimpleOnRotateGestureListener(){

@Override

public boolean onRotate(RotateGestureDetector detector) {

mRotationDegrees = -detector.getRotationDegreesDelta()+mRotationDegrees;

mRotationDegrees = mRotationDegrees % 360;

mView.setRotation(mRotationDegrees);

Log.i(TAG, "onRotate: "+detector.getRotationDegreesDelta()+"----"+mRotationDegrees);

return true;

}

};

}

2.3 旋转图示

三、MoveGestureDetector的使用

3.1 MoveGestureDetector和MoveGestureDetector.SimpleOnMoveGestureListener的简要说明

MoveGestureDetector 移动的探测器。其中getFocusDelta()获取移动的值,这个值是相对于按下的按个点。

MoveGestureDetector.SimpleOnMoveGestureListener 移动的监听。

3.2 MoveGestureActivity.java

MoveGestureActivity

/** * Project: YuantaiApplication
* Create Date: 2017/4/27
* Author: qiwenming
* Description:
* 移动 */

public class MoveGestureActivity extends BaseActivity {

private View mView;

private MoveGestureDetector mMoveGestureDetector;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_move_gesture);

mView = findViewById(R.id.move_view);

mMoveGestureDetector = new MoveGestureDetector(this,mSimpleOnMoveGestureListener);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

mMoveGestureDetector.onTouchEvent(event);

return super.onTouchEvent(event);

}

private float mOffsetX = 0;

private float mOffsetY = 0;

private float mLastX = 0;

private float mLastY = 0;

private MoveGestureDetector.SimpleOnMoveGestureListener mSimpleOnMoveGestureListener = new MoveGestureDetector.SimpleOnMoveGestureListener(){

@Override

public boolean onMove(MoveGestureDetector detector) {

mOffsetX = detector.getFocusDelta().x+mLastX;

mOffsetY = detector.getFocusDelta().y+mLastY;

mView.setTranslationX(mOffsetX);

mView.setTranslationY(mOffsetY);

return super.onMove(detector);

}

@Override

public void onMoveEnd(MoveGestureDetector detector) {

mLastX = mOffsetX;

mLastY = mOffsetY;

super.onMoveEnd(detector);

}

};

}

3.3 移动图示

四、源码

android第三方手势,Android手势识别02——旋转、移动等使用第三方库相关推荐

  1. android自定义手势,Android编程实现自定义手势的方法详解

    本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何 ...

  2. android自定义手势,Android实现自定义手势和识别手势的功能

    这篇文章主要介绍了Android实现自定义手势和识别手势的功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1. 先完成自定义手势的Activity 1.1 因 ...

  3. android第三方手势,Android手势---GestureDetector

    GestureDetector 可以使用 MotionEvents 检测各种手势和事件. 这个类只能用于检测触摸事件的 MotionEvent GestureDetector有三个内部接口,两个内部类 ...

  4. android辅助功能手势,Android辅助功能——全局手势放大实现原理

    在Android的辅助功能中,存在一个点击三次屏幕触发屏幕放大功能. 辅助功能中打开 放大后效果 这个功能的使用频率实在是低...但是为什么会想记录一下这个功能的实现原理.第一,在处理性能问题的时候遇 ...

  5. iOS学习笔记-068.手势识别02——捏合、拖拽、旋转手势

    手势识别02捏合拖拽旋转手势 一捏合手势 1 UIPinchGestureRecognizerh 2 代码示例 3 图示 二拖拽手势 1 UIPanGestureRecognizerh 2 代码示例 ...

  6. Android的手势交互

    2019独角兽企业重金招聘Python工程师标准>>> 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件 ...

  7. android系统手势app,8种iOS手势规定和14种android手势规定详解

    不知道大家对ios系统和android系统的规定的原生手势有哪些吗?看到这样的标题,你能够回答出几个呢? 其实,APP设计师和h5开发工程师对移动设备的手势的了解和理解是非常有必要的.只有掌握了这些平 ...

  8. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!—Android Gesture之【输入法手势技术】...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  9. Android深入探究笔记--手势识别

    知识不分你我.转载自:http://blog.163.com/gpf1987@126/blog/static/140401677201212921237657/ Android深入探究笔记--手势识别 ...

最新文章

  1. 中科大“重金”招博士,保底年收入10万,却只面向5校本科生
  2. [Jenkins]Error:403 No valid crumb was included in the request
  3. 程序员如何让自己的工作更上一个台阶
  4. maven中tomcat7-maven-plugin插件的使用
  5. Canvas制作排序算法演示动画
  6. 20155213 2016-2017-2《Java程序设计》课程总结
  7. 设计师必备|年年都能借鉴的新年Banner设计
  8. redis集群实现(六) 容灾与宕机恢复
  9. 2020年1月1日起,谷歌 Patch Rewards 计划将降低准入门槛,提升开源项目的安全性...
  10. SQLMETAL :Linq对象生成
  11. mysql api是什么意思_什么是mysql c api? 解析mysql c api简单应用
  12. ios13 无法传参_Win版iOS13越狱最新消息汇总丨拼音字体更新
  13. 原生js导出excel,并保留样式
  14. 自走棋服务器没有响应,从爆火到凉凉,多多自走棋宣布停服,加入腾讯属于无奈?...
  15. 配置Linaro toolchain交叉编译工具
  16. H5微信分享 自定义图标和内容(以及二次分享图片丢失的解决办法)
  17. JDK动态代理过程中报错interface ** is not visible from class loader
  18. 简单几步教你如何看k线图图解
  19. 学校运动会广播稿计算机,学校运动会广播稿
  20. 计算机考研和就业pk,考研PK就业:提高自身竞争力比文凭更重要

热门文章

  1. 网络适配器(有线、无线)消失,网络适配器出现感叹号
  2. 从信号处理认识傅里叶变换
  3. 阿里技术:浅谈分库分表那些事儿
  4. 一个同行对JAVA的理解
  5. excel中同行多列数据的比较
  6. Spring 学习日记 (1)配置文件的装载
  7. 德语水平考试(Deutsch-Test für Zuwanderer
  8. linux下搭建discuz论坛
  9. 计算机毕业设计springboot家庭财务管理系统 596n0源码+系统+程序+lw文档+部署
  10. LIDC肺结节的下载