`

双指拖动缩放图片

阅读更多
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
分享到:
评论
1 楼 m331006 2012-06-26  
好像没效果耶。。。怎么回事。。。imageView要加什么属性的呢。

相关推荐

    Android 双指拖动和双指缩放图片

    在Android开发中,实现双指拖动和双指缩放图片是常见的手势识别应用场景,尤其在图片查看器或画板类应用中极为常见。本文将深入探讨如何在Android平台上实现这一功能,以及如何将绘制的线条与背景图片进行正片叠底的...

    Android 图片双指缩放 单指拖拽 、拖到边界回弹

    本篇文章将深入探讨如何在Android应用中实现这个功能,包括双指缩放、单指拖拽以及图片拖动到边界时的回弹效果。 首先,我们需要了解Android中的手势检测。Android提供了`GestureDetector`和`ScaleGestureDetector`...

    微信小程序自定义组件实现图片单指拖动双指缩放效果

    本示例中,我们关注的是一个特定的自定义组件,它实现了图片的单指拖动以及双指缩放效果。这样的功能在很多应用场景中都非常实用,比如查看高清图片、地图导航等。 首先,我们需要理解微信小程序中的自定义组件是...

    android双指缩放图片和单指拖拽

    Android 双指缩放图片和单指拖拽 Android 双指缩放图片和单指拖拽是 Android 开发中常用的功能,允许用户通过双指缩放和单指拖拽来控制图片的大小和位置。本文将详细介绍该功能的实现原理和代码实现。 双指缩放...

    cocos2d-x 双指缩放,单指拖动,双击自动放大地图

    在Cocos2d-x游戏开发中,实现"双指缩放,单指拖动,双击自动放大地图"的功能是一项常见的交互设计,它为玩家提供了更直观、更友好的操作体验。下面将详细讲解如何利用Cocos2d-x库来实现这些功能。 一、双指缩放 ...

    移动端jquery效果显示地图双指缩放,单指拖动

    "移动端jquery效果显示地图双指缩放,单指拖动"这个主题主要探讨了如何使用jQuery和JavaScript技术在移动设备上实现类似地图应用的交互功能,即双指缩放(pinch-to-zoom)和单指拖动(drag-to-move)。下面将详细...

    hammer 对图片的拖拽 缩放

    缩放手势则让用户可以通过双指开合来放大或缩小图片。同样,我们需要监听`pinchstart`, `pinch`, 和 `pinchend`事件: ```javascript hammertime.on('pinchstart', function(event) { // 缩放开始时的操作,可以...

    Android项目控件以及双指放大缩小图片、单指拖动图片.rar

    首先,我们来看双指缩放图片。这一功能是通过Android的MotionEvent类和GestureDetector类来实现的。MotionEvent包含了触摸屏幕时的坐标信息,而GestureDetector则用于检测用户的特定手势,如双击、滑动或 pinch-zoom...

    adroid实现拖拽缩放图片

    本项目“adroid实现拖拽缩放图片”通过MutlTouchSample示例,提供了这样一个功能的实现方法。下面我们将深入探讨这个知识点。 首先,我们来理解拖动和缩放的基本原理。拖动是指用户触摸屏幕后,通过移动手指改变...

    Android-一个可以实现单指移动双击缩放双指缩放的View

    在这个场景中,我们关注的是一个名为"RikkaScalableView"的自定义View,它实现了三个核心功能:单指移动、双击缩放以及双指缩放。这些功能对于构建交互丰富的应用,特别是图片查看器或地图应用,非常实用。 首先,...

    安卓Android源码——控件以及双指放大缩小图片、单指拖动图片.rar

    在安卓(Android)平台上开发应用时,我们经常会遇到需要处理用户交互的情况,特别是与图像相关的操作,如双指缩放和单指拖动。这个压缩包文件“安卓Android源码——控件以及双指放大缩小图片、单指拖动图片.rar”...

    Android应用源码控件以及双指放大缩小图片、单指拖动图片-IT计算机-毕业设计.zip

    在Android应用开发中,创建一个可以支持双指缩放和单指拖动的图片查看器是一个常见的需求,尤其是在实现图片浏览、编辑或者地图应用时。本项目提供的源码示例,是一个专门针对这一功能的实践教学案例,适用于毕业...

    Android图片裁剪----移动、缩放图片进行裁剪

    缩放图片: 1. Matrix也提供了setScale方法来实现图片的缩放。它需要两个参数,分别是X轴和Y轴的缩放比例。 2. 在双指缩放手势检测中,可以通过计算两个手指之间的距离变化来确定缩放比例。 3. 更新Matrix后,同样...

    hammer.js移动端图片手指缩放插件

    在本案例中,我们主要关注的是图片手指缩放功能,这在手机移动端的网页浏览或图像查看中非常常见。 1. **Hammer.js 插件安装与引入**: 在项目中使用 Hammer.js,首先需要将其下载或通过 CDN 引入。在本压缩包中,...

    Unity移动的手势插件(移动、旋转、缩放)

    自己开发使用的用于Unity所开发的移动端应用程序,具有对3D物体单指移动、单指旋转、双指缩放的功能,UnityPackage中包含: 1:完整代码 2:测试场景 注:适用于Unity所开发的移动端应用程序

    Android应用源码控件以及双指放大缩小图片、单指拖动图片.zip

    在Android应用开发中,创建一个可以支持双指缩放和单指拖动的图片查看器是一项常见的需求。这个源码示例提供了实现这一功能的方法,它涵盖了Android UI控件的使用、手势检测以及图片处理等多个方面的知识。接下来,...

    js实现图片缩放与拖动

    在JavaScript中实现图片的缩放和拖动功能是一项常见的需求,尤其在开发交互式Web应用时。本篇文章将深入探讨如何使用JavaScript实现这一功能,并提供一个基础实例。 首先,我们需要理解图片缩放和拖动的基本原理。...

Global site tag (gtag.js) - Google Analytics