Android拖动和缩放图片

2014年5月9日

我们在使用应用其中常常须要浏览图片。比方在微信其中。点击图片之后能够对图片进行缩放。

本博客介绍怎样对图片进行拖拽和缩放。这首先要了解Android中的触摸机制了,在屏幕中有手指按下、手指抬起、手指移动还有多个手指触摸的动作。

我们要实现对图片的拖拽和缩放就是要基于这些动作来进行逻辑处理。

图片的拖拽主要是计算手指開始的位置与当前手指的位置关系,来进行平移的,详细能够看代码。

图片的缩放就涉及到计算两点之间的距离来得到缩放比,调用矩阵方法来达到缩放的效果。

演示样例代码:http://download.csdn.net/detail/wwj_748/7324363

package com.wwj.dragscale;import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;/*** 对图片进行拖拽和缩放* * @author wwj* */
public class MainActivity extends Activity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = (ImageView) findViewById(R.id.imageView);imageView.setOnTouchListener(new TouchListener());}private class TouchListener implements OnTouchListener {private PointF startPoint = new PointF();private Matrix matrix = new Matrix();private Matrix currentMaritx = new Matrix();private int mode = 0; // 用于标记模式private static final int DRAG = 1; // 拖动private static final int ZOOM = 2; // 放大private float startDis = 0;private PointF midPoint; // 中心点@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN:mode = DRAG; // 拖拽currentMaritx.set(imageView.getImageMatrix()); // 记录ImageView当前移动位置startPoint.set(event.getX(), event.getY()); // 開始点break;case MotionEvent.ACTION_MOVE:// 移动事件if (mode == DRAG) { // 图片拖动事件float dx = event.getX() - startPoint.x; // x轴移动距离float dy = event.getY() - startPoint.y;matrix.set(currentMaritx); // 在当前的位置基础上移动matrix.postTranslate(dx, dy);} else if (mode == ZOOM) { // 图片放大事件float endDis = distance(event); // 结束距离if (endDis > 10f) {float scale = endDis / startDis; // 放大倍数matrix.set(currentMaritx);matrix.postScale(scale, scale, midPoint.x, midPoint.y);}}break;case MotionEvent.ACTION_UP:mode = 0;break;// 有手指离开屏幕,但屏幕还有触点(手指)case MotionEvent.ACTION_POINTER_UP:mode = 0;break;// 当屏幕上已经有触点(手指),再有一个手指压下屏幕case MotionEvent.ACTION_POINTER_DOWN:mode = ZOOM;startDis = distance(event);if (startDis > 10f) { // 避免手指上有两个midPoint = mid(event);currentMaritx.set(imageView.getImageMatrix()); // 记录当前的缩放倍数}break;}// 显示缩放后的图片imageView.setImageMatrix(matrix);return true;}}/*** 计算两点之间的距离* * @param event* @return*/public static float distance(MotionEvent event) {float dx = event.getX(1) - event.getX(0);float dy = event.getY(1) - event.getY(0);return FloatMath.sqrt(dx * dx + dy * dy);}/*** 计算两点之间的中间点* * @param event* @return*/public static 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);}}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android拖动和缩放图片相关推荐

  1. android 拖动和缩放 [Dragging and Scaling]

    Dragging and Scaling [拖动和缩放] 这节课描述如何使用触摸手势来拖动和缩放屏幕上的对象,使用onTouchEvent()方法来拦截触摸事件. Drag an Object [拖拽 ...

  2. android怎么设置图片缩放比例,Android按比例缩放图片

    Point outSize = new Point(showBigIvPic.getWidth(),showBigIvPic.getHeight());// 显示区域的高宽 // 使用图片的缩放比例计 ...

  3. android 自由缩放图片大小,android Matrix实现图片随意放大缩小或拖动

    本文实例为大家分享了android Matrix图片随意放大缩小和拖动的具体代码,供大家参考,具体内容如下 step1:新建一个项目DragAndZoom,并准备一张照片放在res/drawable- ...

  4. android 拖动缩放窗口大小,Android小应用----图片的拖动、缩放

    public class MainActivity extends Activity { private ImageView operImage; private PointF point = new ...

  5. Android手势:单指拖动、双指缩放图片

    手势其实是一个比较复杂的东西,首先是因为处理的时机.Android中触摸屏的事件其实只有ACTION_DOWN.ACTION_MOVE和 ACTION_UP这三种,当然我们实现手势的逻辑时,一般会用到 ...

  6. android edittext_Android 支持拖动、缩放的自定义软键盘

    点击上方"Android技术杂货铺",选择"标星" 干货文章,第一时间送达! 开篇 本次给大家分享的是支持拖动.缩放的自定义原生软键盘.不同于市面上的自定义软件 ...

  7. android缩放组件,Android控件实现图片缩放功能

    1 简介 先来一张效果图 TIM图片.gif 上图中灰色的一块是ImageView控件,ImageView中的图片进行左右上下移动,以及双指缩放. 对于android控件的缩放移动,点这里----an ...

  8. android 手势缩放图片框架

    //图片手势放大 第一个ImageViewTouch 只支持图片放大和缩小位置不会变动 compile 'it.sephiroth.android.library.imagezoom:imagezoo ...

  9. Android之对资源图片进行比例缩放

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

最新文章

  1. LLDB+Python脚本:增强LLDB调试
  2. HDU1002 Problem II(大数相加)(C++题解)
  3. 第十六章 推荐系统-机器学习老师板书-斯坦福吴恩达教授
  4. 什么是OpenCL?面向FPGA的OpenCL有何优点?
  5. GARFIELD@01-13-2005
  6. 情人节民宿预定量同比增200% 北京建国门最火
  7. java编写一个移动物体_java编写一个可以上下移动的小球:运行后,可以通过上下左右键进行移动...
  8. 转-由12306.cn谈谈网站性能技术
  9. 关于VSS上的项目源码管理的注意问题
  10. 生存分析——快手的基于深度学习框架的集成⽣存分析软件KwaiSurvival(一)
  11. JAVA网络编程-TCP客户端与服务器端连接
  12. python爬虫: 爬一个英语学习网站
  13. 摄像头远程监控精灵 4.65
  14. 土地利用/土地覆盖数据整理
  15. 找工作系列之-操作系统
  16. 为何农历10月1号要祭祖上坟?原来有这么多讲究,你知道吗?
  17. 英语语法篇 - 各类词性和句子成分的作用
  18. 如何测试一只一支圆珠笔
  19. Makefile中的奇葩字符
  20. json 大括号 转意_json字符串中的大括号转义传到后台_JSON 序列化中的转义和 Unicode 编码...

热门文章

  1. 用C#计算1000以内含1的数字
  2. 一个弹出式menu的制作
  3. JavaScript中处理日期的一些函数和方法
  4. Centos7如何开启端口
  5. 关于CSS 3 及浏览器兼容性问题
  6. 记一次Linux系统内存占用较高得排查
  7. 如何利用框选工具获取多边形范围?
  8. DVWA 1.9 通关秘籍
  9. SQLServer 一些有用的语句
  10. Centos环境下实现DNS的智能解析