双指拖动缩放图片

iv = (ImageView) findViewById(R.id.iv);
iv.setOnTouchListener(new MulitPointTouchListener(iv));
iv.setScaleType(ScaleType.CENTER_INSIDE);

public class MulitPointTouchListener implements OnTouchListener {

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

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

		PointF start = new PointF();
		PointF mid = new PointF();
		float oldDist = 1f;

		public MulitPointTouchListener(ImageView image) {
			super();
			this.image = image;
		}

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			this.image.setScaleType(ScaleType.MATRIX);

			ImageView view = (ImageView) v;
			// dumpEvent(event);

			switch (event.getAction() & MotionEvent.ACTION_MASK) {

			case MotionEvent.ACTION_DOWN:

				Log.w("FLAG", "ACTION_DOWN");
				matrix.set(view.getImageMatrix());
				savedMatrix.set(matrix);
				start.set(event.getX(), event.getY());
				mode = DRAG;
				break;
			case MotionEvent.ACTION_POINTER_DOWN:
				Log.w("FLAG", "ACTION_POINTER_DOWN");
				oldDist = spacing(event);
				if (oldDist > 10f) {
					savedMatrix.set(matrix);
					midPoint(mid, event);
					mode = ZOOM;
				}
				break;
			case MotionEvent.ACTION_UP:
				Log.w("FLAG", "ACTION_UP");
			case MotionEvent.ACTION_POINTER_UP:
				Log.w("FLAG", "ACTION_POINTER_UP");
				mode = NONE;
				break;
			case MotionEvent.ACTION_MOVE:
				Log.w("FLAG", "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 > 10f) {
						matrix.set(savedMatrix);
						float scale = newDist / oldDist;
						matrix.postScale(scale, scale, mid.x, mid.y);
					}
				}
				break;
			}

			view.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);
		}
	}


实现大图滚动显示
http://www.eoeandroid.com/code/2012/0802/2000.html

Muilti-touch 双指缩放文字

import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

public class ZoomListenter implements OnTouchListener {

	private int mode = 0;
	float oldDist;
	float textSize = 0;

	TextView textView = null;

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		textView = (TextView) v;
		if (textSize == 0) {
			textSize = textView.getTextSize();
		}
		switch (event.getAction() & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN:
			mode = 1;
			break;
		case MotionEvent.ACTION_UP:
			mode = 0;
			break;
		case MotionEvent.ACTION_POINTER_UP:
			mode -= 1;
			break;
		case MotionEvent.ACTION_POINTER_DOWN:
			oldDist = spacing(event);
			mode += 1;
			break;

		case MotionEvent.ACTION_MOVE:
			if (mode >= 2) {
				float newDist = spacing(event);
				if (newDist > oldDist + 1) {
					zoom(newDist / oldDist);
					oldDist = newDist;
				}
				if (newDist < oldDist - 1) {
					zoom(newDist / oldDist);
					oldDist = newDist;
				}
			}
			break;
		}
		return true;
	}

	private void zoom(float f) {
		textView.setTextSize(textSize *= f);
	}

	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);
	}

}

使用:
textView = (TextView) findViewById(R.id.textView);     
textView.setOnTouchListener(new ZoomListenter()); 


Android单点触控技术,对图片进行平移,缩放,旋转操作
http://blog.csdn.net/xiaanming/article/details/42833893
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值