当前位置: 代码迷 >> Android >> android图片的拖沓以及放大缩小控制
  详细解决方案

android图片的拖沓以及放大缩小控制

热度:37   发布时间:2016-05-01 11:23:50.0
android图片的拖拉以及放大缩小控制

直接上代码,代码很清楚。

import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;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.view.ViewGroup.MarginLayoutParams;import android.widget.ImageView;public class MainActivity extends Activity implements OnTouchListener {	/** Called when the activity is first created. */	// 放大缩小	Matrix matrix = new Matrix();	Matrix savedMatrix = new Matrix();	PointF start = new PointF();	PointF mid = new PointF();	float oldDist;	private ImageView myImageView;	// 模式	static final int NONE = 0;	static final int DRAG = 1;	static final int ZOOM = 2;	int mode = NONE;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		myImageView = (ImageView) findViewById(R.id.myImage);		myImageView.setOnTouchListener(this);	}	@Override	public boolean onTouch(View v, MotionEvent event) {		ImageView myImageView = (ImageView) v;		switch (event.getAction() & MotionEvent.ACTION_MASK) {		// 设置拖拉模式		case MotionEvent.ACTION_DOWN:			matrix.set(myImageView.getImageMatrix());			savedMatrix.set(matrix);			start.set(event.getX(), event.getY());			mode = DRAG;			break;		case MotionEvent.ACTION_UP:		case MotionEvent.ACTION_POINTER_UP:			mode = NONE;			break;		// 设置多点触摸模式		case MotionEvent.ACTION_POINTER_DOWN:			oldDist = spacing(event);			if (oldDist > 10f) {				savedMatrix.set(matrix);				midPoint(mid, event);				mode = ZOOM;			}			break;		// 若为DRAG模式,则点击移动图片		case MotionEvent.ACTION_MOVE:			if (mode == DRAG) {				matrix.set(savedMatrix);				matrix.postTranslate(event.getX() - start.x, event.getY()						- start.y);			}			// 若为ZOOM模式,则点击触摸缩放			else if (mode == ZOOM) {				float newDist = spacing(event);				if (newDist > 10f) {					matrix.set(savedMatrix);					float scale = newDist / oldDist;					// 设置硕放比例和图片的中点位置					matrix.postScale(scale, scale, mid.x, mid.y);				}			}			break;		}		myImageView.setImageMatrix(matrix);		return true;	}	// 计算移动距离	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);	}	// 计算中点位置	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);	}}


  相关解决方案