android 图片缩放
来源:互联网 发布:python ui automation 编辑:程序博客网 时间:2024/05/15 17:19
一、实现步骤
1、在touch down的时候,记录两个手指头的初始距离,记录初始 比例
2、在move的时候,通过现在的距离除以初始距离,算出缩放比例。缩放比例乘以初始比例,就是当前比例
3、设置图片矩阵的scale和translate。设置的原理如下图:
1) bitmap矩阵先放缩到和ImageView一样大
2)移bitmap矩阵到和ImageView 重合
二、源码
public class MyImageView extends ImageView {private static final int MIN_DISTANCE = 10;private Matrix mMatrix = new Matrix();private float mStartRatio;private float mStartDis;public Bitmap mImageBitmap;public float mRatio;public float mInitRadio;public MyImageView(Context context) {super(context);setScaleType(ScaleType.MATRIX);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_MOVE:if (mStartDis < MIN_DISTANCE)break;float endDis = distance(event);if (endDis > 10f) {float ratio = endDis / mStartDis;mRatio = mStartRatio * ratio;refreshMatrix();}break;case MotionEvent.ACTION_UP:if (mRatio < mInitRadio) {mRatio = mInitRadio;refreshMatrix();}break;case MotionEvent.ACTION_POINTER_UP:break;case MotionEvent.ACTION_POINTER_DOWN:cancelLongPress();initStartDistance(event);break;}return super.onTouchEvent(event);}private void initStartDistance(MotionEvent event) {mStartDis = distance(event);if (mStartDis > MIN_DISTANCE) {mStartRatio = mRatio;}}private float distance(MotionEvent event) {if (event.getPointerCount() < 2)return 0;float dx = event.getX(1) - event.getX(0);float dy = event.getY(1) - event.getY(0);return FloatMath.sqrt(dx * dx + dy * dy);}@Overridepublic void setImageBitmap(Bitmap imageBitmap) {if (mImageBitmap != null&& mImageBitmap != imageBitmap) {mImageBitmap.recycle();mImageBitmap = null;}mImageBitmap = imageBitmap;super.setImageBitmap(imageBitmap);}public void initImageMatrix(int width, int height) {float xRatio = (float) width / mImageBitmap.getWidth();float yRatio = (float) height/ mImageBitmap.getHeight();mRatio = xRatio < yRatio ? xRatio : yRatio;mInitRadio = mRatio;refreshMatrix(width, height);}private void refreshMatrix() {refreshMatrix(getWidth(), getHeight());}private void refreshMatrix(int width, int height) {mMatrix.reset();mMatrix.postScale(mRatio, mRatio,mImageBitmap.getWidth() / 2,mImageBitmap.getHeight() / 2);mMatrix.postTranslate((width - mImageBitmap.getWidth()) / 2,(height - mImageBitmap.getHeight()) / 2);setImageMatrix(mMatrix);}}
0 0
- Android 图片缩放
- Android 图片缩放-Matrix
- android图片的缩放
- android图片的缩放
- Android 图片缩放-Matrix
- android图片的缩放 .
- android 两点缩放图片
- android ImageView图片缩放
- android 图片缩放
- android 图片缩放
- android 两点缩放图片
- Android图片缩放方法
- android 图片缩放
- Android 缩放图片
- android缩放图片
- Android 图片缩放
- android图片手势缩放
- android ImageView图片缩放
- MySQL学习6_ERROR! MySQL server PID file could not be found!解决方法
- 第3周实践项目4 - 顺序表应用(2)
- gensim的LSI模型来计算文档的相似度
- 对于viewport的理解
- 工具方法:下载文件时碰到相同文件,文件名增加(1) 如果有(1)则下载文件名后缀(2)
- android 图片缩放
- git 分支创建和管理
- Java源码String类lastIndexOf方法的分析
- JAVA classLoader
- 安卓的数字签名技术
- linux 信号
- lsi计算文档相似度
- 第三周项目2-建设顺序表算法库
- LINK : fatal error LNK1104: cannot open file "mfc42u.lib"