您的位置:首页 > 移动开发 > Android开发

Android图片放大缩小自由移动控件

2017-11-02 15:10 435 查看
public class ScaleImageView extends ImageView {

private Matrix matrix=new Matrix();
private Matrix savedMatrix=new Matrix();

static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;

// Remember some things for zooming
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;

public ScaleImageView(Context context) {
super(context);
}

public ScaleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public ScaleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return (float) Math.sqrt(x * x + y * y);
}

private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getActionMasked()==MotionEvent.ACTION_POINTER_UP)
Log.d("Infor", "多点操作");
switch(event.getActionMasked()){
case MotionEvent.ACTION_DOWN:
matrix.set(getImageMatrix());
savedMatrix.set(matrix);
start.set(event.getX(),event.getY());
Log.d("Infor", "触摸了...");
mode=DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN: //多点触控
oldDist=this.spacing(event);
if(oldDist>10f){
Log.d("Infor", "oldDist"+oldDist);
savedMatrix.set(matrix);
midPoint(mid,event);
mode=ZOOM;
}
break;
case MotionEvent.ACTION_POINTER_UP:
mode=NONE;
break;
case MotionEvent.ACTION_MOVE:
if(mode==DRAG){     //此实现图片的拖动功能...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX()-start.x, event.getY()-start.y);
}
else if(mode==ZOOM){// 此实现图片的缩放功能...
float newDist=spacing(event);
if(newDist>10){
matrix.set(savedMatrix);
float scale=newDist/oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
setImageMatrix(matrix);
return true;
}
}
直接在布局文件中当成自定义控件:
<zhong.imageviewdemo.ScaleImageViewandroid:id="@+id/imageview_activity"android:layout_width="300dp"android:layout_height="300dp"android:src="@drawable/sales_perform_new"android:scaleType="matrix"android:layout_centerVertical="true"android:layout_centerHorizontal="true" />
其中有一行很关键的是
android:scaleType="matrix"
这一行一定是设置成这样才有效果;

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐