双指拖动缩放图片

来源:互联网 发布:淘宝网阿里旺旺打不开 编辑:程序博客网 时间:2024/05/21 16:20
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;}@Overridepublic 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;@Overridepublic 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
0 0
原创粉丝点击