上一篇讲解了手势识别中的点击和双击事件的识别,用到的是GestureDetector类和GestureDetectorCompat类,用于监听用户触摸屏幕中的简单动作。

缩放

基本用法如下,可以通过缩放手势缩放一个View

public class ScaleGestureActivity extends BaseActivity {

    private View mView;
private ScaleGestureDetector mScaleGestureDetector;
private static final String TAG = "ScaleGestureActivity";
private float mScaleFactor = 1.0f; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scale_gesture);
mView = findViewById(R.id.scale_view);
mScaleGestureDetector = new ScaleGestureDetector(this,mScaleGestureListener);
} @Override
public boolean onTouchEvent(MotionEvent event) {
mScaleGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
} private ScaleGestureDetector.OnScaleGestureListener mScaleGestureListener = new ScaleGestureDetector.OnScaleGestureListener() {
@Override
public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
mScaleFactor *= scaleGestureDetector.getScaleFactor();
mView.setScaleX(mScaleFactor);
mView.setScaleY(mScaleFactor);
Log.i(TAG, "onScale: "+ scaleGestureDetector.getScaleFactor()+"----"+mScaleFactor);
return true;
} @Override
public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
return true;
} @Override
public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) { }
};
}
ScaleGestureDetector 官方对该类的解释如下:

Detects scaling transformation gestures using the supplied MotionEvents. The ScaleGestureDetector.OnScaleGestureListener callback will notify users when a particular gesture event has occurred. This class should only be used with MotionEvents reported via touch. To use this class:

该类的构造方法如下:

public ScaleGestureDetector(Context context, ScaleGestureDetector.OnScaleGestureListener listener)

由构造方法可知需要为一个缩放类设置一个缩放的监听接口,具体实现见代码中监听类接口的实现,下面具体介绍几个函数的含义:

  1. public boolean onScale(ScaleGestureDetector detector);

缩放时会被调用,返回值代表本次缩放事件是否已被处理。如果已被处理,那么detector就会重置缩放事件;如果未被处理,detector会继续进行计算,修改getScaleFactor()的返回值,直到被处理为止。因此,它常用在判断只有缩放值达到一定数值时才进行缩放。下面的代码表示只有当缩放倍数达到2倍时才对其进行缩放,否则该事件不处理。

public boolean onScale(ScaleGestureDetector detector) {
System.out.println(detector.getScaleFactor());
if(detector.getScaleFactor()< 2){
return false;
}
mMatrix.preScale(detector.getScaleFactor(), detector.getScaleFactor());
setImageMatrix(mMatrix);
return true;
}

2.public boolean onScaleBegin(ScaleGestureDetector detector)

缩放开始时会被调用。返回值表示该detector是否处理后继的缩放事件。返回false时,不会执行后续的onScale()。

3. public void onScaleEnd(ScaleGestureDetector scaleGestureDetector)

缩放结束时的回调

http://blog.csdn.net/qiwenmingshiwo/article/details/70850406

https://github.com/Almeros/android-gesture-detectors

https://github.com/Almeros/android-gesture-detectors-example/blob/master/app/src/main/java/com/almeros/android/multitouch/example/TouchActivity.java

Android 手势识别—缩放的更多相关文章

  1. Android手势识别的发展

    在播放器.与手势识别.所以,看看今天的我们Android手势识别. 首先,我们需要站在巨人的肩膀上.有些人举了个例子和说明. 第一章: http://www.2cto.com/kf/201110/10 ...

  2. 札记:android手势识别,MotionEvent

    摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...

  3. Android 移动缩放的ImageView

    今天介绍一下Android中怎么实现ImageView的缩放和移动,自定义TouchImageView. public class TouchImageView extends ImageView { ...

  4. Andorid-如何为你的Android应用缩放图片

    很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件部门), ...

  5. Android手势识别(单击 双击 抬起 短按 长按 滚动 滑动)

    对于触摸屏,其原生的消息无非按下.抬起.移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理.不过,为了提高我们的APP的用户体验,有时候我们 ...

  6. 一起学习android图像缩放资源 (27)

    效果图: 在平时载入图片时,我会使用SetImageBitmap.setImageResource.BitmapFactory.decodeResource来设置一张图 片通过以上方法来设置图片时.会 ...

  7. Android手势识别总结

    一:首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouc ...

  8. android手势识别ViewFlipper触摸动画

    使用ViewFlipper来将您要来回拖动的View装在一起,然 后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可.比如当手指向左快速滑动时跳转到上一 ...

  9. Android Bitmap 缩放 旋转 水印 裁剪操作

    在android当中,Bitmap代表一个图片,里面封装了图片相关的信息. 一.将图片进行缩放操作 1.获得Bitmap对象 Bitmap bitmap = BitmapFactory.decodeR ...

随机推荐

  1. 【C#】VS2015开发环境的安装和配置(转)

    出处: http://www.cnblogs.com/rainmj/p/5636518.html http://www.cnblogs.com/rainmj/p/5636529.html http:/ ...

  2. [GO]kafka的生产者和消费者

    生产者: package main import ( "github.com/Shopify/sarama" "fmt" "time" ) ...

  3. MySQL通过游标来实现通过查询记录集循环

    /*我们有时候会遇到需要对 从A表查询的结果集S_S 的记录 进行遍历并做一些操作(如插入),且这些操作需要的数据或许部分来自S_S集合*//*临时存储过程,没办法,不能直接在查询窗口做这些事.*/d ...

  4. SpringMVC零碎笔记

    在web.xml里可以配置webapp的默认首页,格式如下: <welcome-file-list> <welcome-file>index.html</welcome- ...

  5. MySQL的NO_BACKSLASH_ESCAPES

    官方说明: https://dev.mysql.com/doc/refman/5.7/en/mysql-real-escape-string.html 相关资料: https://dev.mysql. ...

  6. VS 附加不上w3wp.exe

    今天调用VS 附加不上w3wp.exe,其他的站点都能附加上,就有一个站附加不上,找了各种可能都没有解决,结果发现是版本被编译成release了,原来的配置都是debug的,不知道被谁给改成relea ...

  7. (KMP 暴力)Corporate Identity -- hdu -- 2328

    http://acm.hdu.edu.cn/showproblem.php?pid=2328 Corporate Identity Time Limit: 9000/3000 MS (Java/Oth ...

  8. C++中的矩阵运算

    C++中的矩阵运算 1. 2阶矩阵的逆矩阵公式

  9. Spark应用程序的运行架构几种说

    (1)简单的说: 由driver向集群申请资源,集群分配资源,启动executor.driver将spark应用程序的代码和文件传送给executor.executor上运行task,运行完之后将结果 ...

  10. Java web 调试技巧之查看浏览器中调试中的network

    在java web开发过程中尤其后台开发经常需要查看浏览器调试中的network项:今天在开发在线预览系统时用到了flexpaper插件,这个插件会调用FlexPaperViewer.swf这个软件( ...