android仿快图浏览,图片缩放移动效果
代码是拿别人的改的 ,原来的有些BUG ,项目加载的都是网络图片 还没弄左右滑动效果
yi 工具类
[java] package com.lin.image;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.Rect;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
public class MyImageView extends ImageView {
private Matrix mMatrix;
private float bWidth;// 图片宽度
private float bHeight;
private int dWidth;//屏幕宽度
private int dHeight;//屏幕高度
private float initScale;
private float mScale;
private float scale;
ImageState mapState = new ImageState();
private float oldDist;
PointF mStart = new PointF();
private Bitmap mBitmap;
float[] values = new float[9];
Matrix initMatrix;
Matrix mSavedMatrix;
public MyImageView(Context context) {
super(context);
this.setScaleType(ScaleType.MATRIX);
}
public void init(MotionEvent event){
mStart.set(event.getX(), event.getY());
mSavedMatrix.set(mMatrix);
}
float rate=1.0f;
// 刷新界面
public void setView() {
//rate=rate/10*9;
// UserUtils.log(TAG, "set view", "set view");
//mMatrix.postScale(scale,scale,0,0);
this.setImageMatrix(mMatrix);
Rect rect = this.getDrawable().getBounds();
this.getImageMatrix().getValues(values);
bWidth = rect.width() * values[0];
bHeight = rect.height() * values[0];
mapState.left = values[2];
mapState.top = values[5];
mapState.right = mapState.left + bWidth;
mapState.bottom = mapState.top + bHeight;
}
private float s=0.9f;
public void setScale(){
float sX = dWidth / 2;
float sY = dHeight / 2;
mMatrix.postScale(s, s, sX, sY);
setView();
}
public void setScreenSize(Context context, int width, int height,Bitmap bitmap) {
mBitmap =bitmap;
dWidth = width;
dHeight = height;
setImageBitmap(mBitmap);
// gd = new GestureDetector(context, new LearnGestureListener());
bWidth = mBitmap.getWidth();
bHeight = mBitmap.getHeight();
// mView = (ImageView) findViewById(R.id.imageView);
float xScale = (float) dWidth / bWidth;
float yScale = (float) dHeight / bHeight;
mScale = xScale <= yScale ? xScale : yScale;
scale = mScale < 1 ? mScale : 1;
initScale = scale;
mMatrix = new Matrix();
mSavedMatrix = new Matrix();
System.out.println("dwidth==="+dHeight+" bHeight===="+bHeight);
// 平移
mMatrix.postTranslate((dWidth - bWidth) / 2, (dHeight - bHeight) / 2);
float sX = dWidth / 2;
float sY = dHeight / 2;
mSavedMatrix.set(mMatrix);
mMatrix.postScale(scale, scale, sX, sY);
setView();
}
/** 计算移动距离 */
private float spacing(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);
}
float backScale;
//缩放
public void zoom(MotionEvent event) {
float newDist = spacing(event);
if((mapState.right-mapState.left)>4*dWidth&&newDist>oldDist)
return;
Log.e("lin","oldDist="+oldDist+",newDist=="+newDist);
if (newDist > 10f&&Math.abs((newDist-oldDist))>10f) {
scale = newDist / oldDist;
if (scale < 1) {
mMatrix.postScale(scale, scale, d
补充:移动开发 , Android ,