擦擦擦
来源:互联网 发布:淘宝天猫优惠券在哪 编辑:程序博客网 时间:2024/04/28 06:54
private final class TouchListener implements View.OnTouchListener { /** 记录是拖拉照片模式还是放大缩小照片模式 */ private int mode = 0;// 初始状态 /** 拖拉照片模式 */ private static final int MODE_DRAG = 1; /** 放大缩小照片模式 */ private static final int MODE_ZOOM = 2; /** 用于记录开始时候的坐标位置 */ private PointF startPoint = new PointF(); /** 用于记录拖拉图片移动的坐标位置 */ private Matrix matrix = new Matrix(); /** 用于记录图片要进行拖拉时候的坐标位置 */ private Matrix currentMatrix = new Matrix(); /** 两个手指的开始距离 */ private float startDis; /** 两个手指的中间点 */ private PointF midPoint; @Override public boolean onTouch(View v, MotionEvent event) { /** 通过与运算保留最后八位 MotionEvent.ACTION_MASK = 255 */ switch (event.getAction() & MotionEvent.ACTION_MASK) { // 手指压下屏幕 case MotionEvent.ACTION_DOWN: mode = MODE_DRAG; // 记录ImageView当前的移动位置 currentMatrix.set(imageView.getImageMatrix()); startPoint.set(event.getX(), event.getY()); break; // 手指在屏幕上移动,改事件会被不断触发 case MotionEvent.ACTION_MOVE: // 拖拉图片 if (mode == MODE_DRAG) { float dx = event.getX() - startPoint.x; // 得到x轴的移动距离 float dy = event.getY() - startPoint.y; // 得到x轴的移动距离 // 在没有移动之前的位置上进行移动 matrix.set(currentMatrix); matrix.postTranslate(dx, dy); } // 放大缩小图片 else if (mode == MODE_ZOOM) { float endDis = distance(event);// 结束距离 if (endDis > 10f) { // 两个手指并拢在一起的时候像素大于10 float scale = endDis / startDis;// 得到缩放倍数 matrix.set(currentMatrix); matrix.postScale(scale, scale,midPoint.x,midPoint.y); } } break; // 手指离开屏幕 case MotionEvent.ACTION_UP: // 当触点离开屏幕,但是屏幕上还有触点(手指) case MotionEvent.ACTION_POINTER_UP: mode = 0; break; // 当屏幕上已经有触点(手指),再有一个触点压下屏幕 case MotionEvent.ACTION_POINTER_DOWN: mode = MODE_ZOOM; /** 计算两个手指间的距离 */ startDis = distance(event); /** 计算两个手指间的中间点 */ if (startDis > 10f) { // 两个手指并拢在一起的时候像素大于10 midPoint = mid(event); //记录当前ImageView的缩放倍数 currentMatrix.set(imageView.getImageMatrix()); } break; } imageView.setImageMatrix(matrix); return true; } /** 计算两个手指间的距离 */ private float distance(MotionEvent event) { float dx = event.getX(1) - event.getX(0); float dy = event.getY(1) - event.getY(0); /** 使用勾股定理返回两点之间的距离 */ return (float) Math.sqrt(dx * dx + dy * dy); } /** 计算两个手指间的中间点 */ private PointF mid(MotionEvent event) { float midX = (event.getX(1) + event.getX(0)) / 2; float midY = (event.getY(1) + event.getY(0)) / 2; return new PointF(midX, midY); }}
阅读全文
1 0
- 擦擦擦
- 擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦
- 我四级又没过 擦擦擦擦擦擦擦
- 领悟工具的“威力”,磨刀擦擦擦--Windows上也能用strings输出controlfile中文件结构信息
- 擦
- 擦
- 擦
- 浇狼都偎崭寡鹤闻苑节镭擦擦良刑
- 我勒个擦擦
- 擦肩
- 擦洒水车
- 擦撒擦拭擦擦拭
- 阿拉擦擦呀 甩葱歌 图铃
- android橡皮擦擦图片功能
- 安卓-橡皮擦擦线完整实现
- 文章测试一擦
- 不经意的擦碰
- 擦撒擦拭擦拭
- android UiAutomator定位失灵的一种解决办法
- 关于python的编码问题
- vue报错 listen EADDRINUSE :::8080
- solr6.5.1搜索PDF格式的文件
- 设计模式(二)— 为什么要用设计模式
- 擦擦擦
- QT网格布局,水平布局,垂直布局设计代码讲解
- Xcode 运行程序,memory 不显示内存
- Sql Server 存取过程读取表中数据,修改后再逐条插入
- Win7系统开机登录框怎么取消?
- 内网环境NTP服务及时间同步(CentOS6.x)配置和部署
- 你所不知的 java 枚举
- 自恢复保险丝、继电器、异步同步通信 20170609 周五
- 【Spring实战】—— 12 AspectJ报错:error at ::0 can't find referenced pointcut XXX