`

通过注册OnTouchListener,来实现多点触控

 
阅读更多
public class Main extends Activity implements OnTouchListener {
	// These matrices will be used to move and zoom image
	Matrix matrix = new Matrix();
	Matrix savedMatrix = new Matrix();

	// We can be in one of these 3 states
	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;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ImageView imageView = (ImageView) findViewById(R.id.imageView);
		imageView.setOnTouchListener(this);
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		ImageView imageView = (ImageView) v;
		switch (event.getAction() & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN:
			savedMatrix.set(matrix);
			start.set(event.getX(), event.getY()); // 設置初始點位置
			mode = DRAG;
			break;
		case MotionEvent.ACTION_POINTER_DOWN:
			oldDist = spacing(event);
			if (oldDist > 10f) {
				savedMatrix.set(matrix);
				midPoint(mid, event);
				mode = ZOOM;
			}
			break;
		case MotionEvent.ACTION_UP:
		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 > 10f) {
					matrix.set(savedMatrix);
					float scale = newDist / oldDist;
					matrix.postScale(scale, scale, mid.x, mid.y);
				}
			}
			break;
		}
		imageView.setImageMatrix(matrix);
		return true; // indicate event was handled
	}

	/** Determine the space between the first two fingers */
	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);
	}

	/** Calculate the mid point of the first two fingers */
	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);
	}
}

 

分享到:
评论

相关推荐

    android多点触控demo,两只手同时拖拽

    这个"android多点触控demo,两只手同时拖拽"是针对Android平台的一个示例项目,其目标是实现用户可以通过两只手指同时对屏幕上的元素进行拖动操作。 多点触控的基础是Android系统提供的MotionEvent类,它是处理触摸...

    Android 多点触控实例源码.zip

    要实现多点触控,我们需要注册一个`View.OnTouchListener`并重写`onTouchEvent()`方法。在这里,我们可以获取到`MotionEvent`对象,然后分析其动作和触摸点信息。 二、源码解析 1. 主Activity 源码中的主Activity...

    多点触控控制字体大小

    这个“多点触控控制字体大小”的项目是一个很好的示例,用于展示如何在Android应用中实现通过多点触控手势来调整文本的大小。下面我们将详细探讨这一功能的实现原理和相关知识点。 首先,我们要理解Android中的触摸...

    Android 多点触控实例--图片的缩放

    要实现多点触控,我们需要让我们的View类实现OnTouchListener接口,并重写onTouch()方法。在这个方法中,我们将处理MotionEvent事件,分析手指的移动和缩放行为。 3. **MotionEvent**: MotionEvent对象包含了...

    Android多点触控放大缩小图片

    在Android系统中,多点触控主要通过MotionEvent类来处理,它可以捕捉到多个手指同时在屏幕上的动作。 二、关键类与接口 1. MotionEvent:Android中的事件类,用于表示屏幕上发生的触摸事件,包括ACTION_DOWN、...

    Android 多点触控实例源码-IT计算机-毕业设计.zip

    - 在自定义View中重写`onTouchEvent(MotionEvent event)`,通过`event.getActionMasked()`和`event.getActionIndex()`来识别多点触控动作。 - 使用`event.getX(int pointerIndex)`和`event.getY(int pointerIndex)...

    传智播客免费公开课程-多点触控手势之二

    开发者可以注册OnTouchListener,并实现onTouchEvent()方法,根据MotionEvent的动作类型ACTION_DOWN、ACTION_MOVE、ACTION_UP等来判断和处理手势。 本课程将详细讲解以下几点关键知识点: 1. **基本手势识别**:如...

    Android 多点触控实例源码.rar

    总之,Android多点触控技术为用户提供了丰富的交互体验,开发者可以通过巧妙地利用`MotionEvent`、`ScaleGestureDetector`以及`Matrix`类来实现各种复杂的触摸手势。通过研究提供的源码,你将能够更好地理解和运用...

    Android实现多点触控,自由缩放图片的实例代码

    Android多点触控涉及到...实现多点触控,自由变化图片 1、 ImageView的基础上继承 2、因为要在图片加载完成就获取到相关的属性,所以实现OnGlobalLayoutListener接口,并实现方法onGlobalLayout 注册OnGlobalLayoutLis

    Android 多点触控与简单手势

    在Android平台上,多点触控(Multi-Touch)和简单手势是移动应用开发中的关键功能,使得用户可以通过手指与屏幕进行交互,实现丰富的操作体验。本文将深入探讨如何在Android应用中实现图片的拖动和缩放功能。 一、...

    android多点触控缩放图片

    在Android平台上,实现多点触控缩放图片是一项常见的需求,尤其在开发图像查看器或者绘图应用时。本文将详细讲解如何在Android中实现这一功能。 首先,我们需要理解多点触控的基本概念。多点触控(Multi-Touch)是...

    多点触控控制字体大小,源码中有详细注释,简单Demo.zip

    总的来说,这个Demo项目提供了一个直观的学习机会,让我们了解如何利用Android的MotionEvent和触摸事件处理机制来实现多点触控功能,特别是如何通过多点触控手势来改变字体大小。通过阅读源码和注释,开发者可以深入...

    双击图片放大缩小及多点触控

    当我们需要实现更复杂的交互,比如双击图片放大缩小以及多点触控操作时,通常需要对默认的`ImageView`进行扩展或使用第三方库来实现。在这个场景中,我们关注的是如何通过自定义`ImageView`实现双击放大缩小以及多点...

    安卓多点触控手势操作相关-一个演示手势的demo.zip

    在安卓平台上,多点触控手势操作是移动应用开发中不可或缺的一部分,它使得用户可以通过手指在屏幕上进行复杂的交互。这个“安卓多点触控手势操作相关-一个演示手势的demo.zip”是一个示例项目,旨在帮助开发者理解...

    Android开发:多点触控测试精华代码

    本文将深入探讨如何在Android应用程序中实现多点触控测试,并分享一些精华代码片段,以帮助开发者们支持多个触控点。 在Android中,处理多点触控主要依赖于`MotionEvent`类。`MotionEvent`对象包含了关于触摸事件的...

    Android应用源码之多点触控控制字体大小,源码中有详细注释,简单Demo.zip

    在这个特定的项目中,我们关注的是如何通过多点触控来控制字体的大小。这个"Android应用源码之多点触控控制字体大小"的示例是一个简单的演示,它展示了如何实现这一功能。源码中包含详细的注释,方便开发者理解和...

Global site tag (gtag.js) - Google Analytics