Android图片的拖拽与缩放
来源:互联网 发布:oracle数据库运维方案 编辑:程序博客网 时间:2024/05/03 15:48
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);}}
2 1
- Android图片的拖拽与缩放
- Android图片的拖拽与缩放
- 6、Android图片的拖拽与缩放
- Android 图片压缩与缩放的方法
- android图片的缩放
- android图片的缩放
- android图片的缩放 .
- android图片的缩放
- Android图片的缩放
- Android 图片缩放与旋转
- Android图片拉伸与缩放
- android图片缩放与旋转
- 实现Android图片预览的拖拽缩放
- android自定义图片,支持缩放拖拽的功能实现
- android 拖拽与缩放
- Android:利用Matrix,实现双手指缩放图片与拖拽图片功能
- Android之关于手势操作图片的缩放与移动
- 图片的缩放与旋转
- java函数参数传递方式
- 4 Solutions to Merge Multiple Excel Worksheets into One
- C#中使用委托对字符串进行冒泡排序案例
- Altera CPLD学习笔记
- Java深度历险(一)——Java字节代码的操纵
- Android图片的拖拽与缩放
- php函数 - PHP粉丝网_13
- 安卓车机不简单 娱乐功能绝不可忽视
- struts2自定义拦截器
- jQuery Basic CSS Selectors[jQuery基本CSS选择器]
- Java深度历险(二)——Java类的加载、链接和初始化
- 获取数据库连接的两种实现方式
- iframe框架高度自适应在兼容模式下(ie7)不兼容的解决方法
- TFrame