public class MainActivity extends Activity {

private ImageView operImage;

private PointF point = new PointF();//记录手指的位置

private PointF midPoint = new PointF();//记录手指间的中点的位置

private Matrix matrix = new Matrix();//记录拖动和缩放前手指按下的matrix

private Matrix newMatrix = new Matrix();//记录手指正在拖动和缩放的matrix

private int type = 0;//操作类型

private float pointerDistance;//两个手指的距离

private static final int DRAG = 1;//拖动

private static final int SCALE = 2;//缩放

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

operImage= (ImageView) findViewById(R.id.before);

operImage.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction()&MotionEvent.ACTION_MASK;

switch (action) {

case MotionEvent.ACTION_DOWN:

float startX = event.getX();

float startY = event.getY();

//记录手指的位置

point.set(startX, startY);

//得到当前图片的位置

matrix.set(operImage.getImageMatrix());

type = DRAG;//拖动

break;

case MotionEvent.ACTION_POINTER_1_DOWN:

//记录图片没有缩放前的大小

matrix.set(operImage.getImageMatrix());

//记录两个手指的距离

pointerDistance = getDistance(event);

//记录两个手指距离的中点

midPoint= getMidPoint(event);

type = SCALE;//缩放

break;

case MotionEvent.ACTION_MOVE:

switch (type) {

case DRAG://拖动

float newX = event.getX();

float newY = event.getY();

newMatrix.set(matrix);

float dx = newX - point.x;

float dy = newY - point.y;

newMatrix.postTranslate(dx, dy);

break;

case SCALE://缩放

newMatrix.set(matrix);

float nowDistance = getDistance(event);

//根据此时的两个手指间的距离除以开始的两个手指间的距离计算缩放比

float scale = nowDistance/pointerDistance;

//根据中心点进行缩放

newMatrix.postScale(scale, scale, midPoint.x, midPoint.y);

break;

default:

break;

}

break;

case MotionEvent.ACTION_UP:

type = 0;

break;

case MotionEvent.ACTION_POINTER_1_UP:

type = 0;

break;

}

operImage.setImageMatrix(newMatrix);

return true;

}

});

}

/*

* 计算两个手指的中点

*/

protected PointF getMidPoint(MotionEvent event) {

float x = (event.getX(1) + event.getX(0))/2;

float y = (event.getY(1) + event.getY(0))/2;

return new PointF(x, y);

}

/*

* 计算两点间的距离

*/

protected float getDistance(MotionEvent event) {

float x = event.getX(0) - event.getX(1);

float y = event.getY(0) - event.getY(1);

return FloatMath.sqrt(x*x + y*y);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

原文:http://blog.csdn.net/andywuchuanlong/article/details/26082265

android 拖动缩放窗口大小,Android小应用----图片的拖动、缩放相关推荐

  1. 微信小程序图片等比缩放显示正中间

    这是小程序 image标签的mode ,对图片的缩放做的处理 缩放 scaleToFill 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 缩放 aspectFit 保持纵横比缩放 ...

  2. html图片缩放6,四款css 图片按比例缩放实例(兼容ie6,7,firefox)

    使用max-width,max-height:或者min-width,min-height的css属性即可.如: 代码如下 img{max-width:100px;max-height:100px;} ...

  3. android图片做平移动画,Android中用Matrix实现ImageView里的图片平移和缩放动画

    注: 这里说的图片的平移和缩放不是对ImageView整个view进行的,而是对ImageView里面的图片进行的(view本身没有什么变化),所以Android自带的动画效果不能满足需求. 功能点: ...

  4. 微信小程序 图片等比例缩放(图片自适应屏幕)

    index.wxml <!--图片宽高大于屏幕宽高--> <image style="width: {{imagewidth}}px; height: {{imagehei ...

  5. android图像处理系列之五-- 给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  6. android性能优化透明,Android性能优化-图片篇

    (1)drawable目录详解(mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi) 1.1.图片在各个目录中要如何存放?(必须理解) android的drawable目录有: drawab ...

  7. android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  8. android xml图片缩放,Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码...

    概述:通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放. /** * 自定义的ImageView控制,可对图片进行多点触控缩放和拖动 * * @author qiuwan ...

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

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

最新文章

  1. VMware Workstation中安装linux系统(CentOS)超详细
  2. 怎么查看linux挂载的硬盘,如何查看Linux服务器已挂载的硬盘
  3. 二分搜索及其扩展(循环递增数组的搜索)
  4. 64位ubuntu kylin 16.04下制作tiny4412可用的SD启动卡
  5. java调用dubbo服务器_dubbo源码分析-服务端注册流程-笔记
  6. html文字竖直书写,css 文字竖直居中的写法和图片垂直居中代码(图文)
  7. MySQL关闭Enterprise Server源码
  8. Mysql 连接的使用
  9. cli vue webpack 实战_Vuejs技术栈从CLI到打包上线实战全解析
  10. Django完整的开发一个博客系统
  11. android的listview单项中包含RadioButton,实现RadioButton的单选显示效果
  12. AUTOCAD打开很卡很慢的解决方法
  13. CWaitCursor 光标设置为沙漏形状
  14. 浏览器刷新vue为什么不会走beforeDestroy和destroyed生命周期
  15. 【Python爬虫历程】使用Cookie来模拟登陆
  16. android自动秒杀脚本,京东自动秒杀脚本手机版-京东自动秒杀脚本安卓版下载v7.0.4 - 7230手游网...
  17. 计算机桌面为什么没有语言栏了,语言栏不见了怎么办,教您语言栏不见了怎么办...
  18. ​从机械工程师到机器学习工程师,我也是个数据科学家了
  19. 一些奇怪的东西以及寄几需要注意的地方
  20. 大厂项目经理分享 Code Review经验

热门文章

  1. javascript单元测试:jasminejs 2.0的烦恼
  2. 认识Linux系统服务(鸟哥18章)
  3. 2013年快要过去了,为新来的2104计划
  4. 神经网络学习历程与总结
  5. OpenCV3学习(12.5) opencv实现粒子滤波目标跟踪
  6. 7-2 jmu-Java-02基本语法-05-浮点数的精确计算 (1 分)
  7. L3-1 森森旅游 (30 分)
  8. 力扣62-不同路径(C++,留个思路)
  9. linux msgctl函数,msgctl()函数
  10. 材料成型过程计算机控制系统,华南理工大学