多点触摸的一个比较简明的示例:
示例代码出处:http://krvarma-android-samples.googlecode.com/svn/trunk/multitouchsample
在学习此示例的时候发现multitouch最多可以处理5个手指,5个以上的则不能处理~~
package com.varma.samples.multitouchsample; import java.util.ArrayList; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.graphics.PointF; import android.util.AttributeSet; //import android.util.FloatMath; import android.view.MotionEvent; import android.view.View; public class MultitouchView extends View { private static final int STROKE_WIDTH = 1; private static final int CIRCLE_RADIUS = 20; private ArrayList<PointF> touchPoints = null; private Paint drawingPaint = null; private boolean isMultiTouch = false; private int pathEffectPhase = 0; public MultitouchView(Context context) { super(context); initialize(context); } public MultitouchView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initialize(context); } public MultitouchView(Context context, AttributeSet attrs) { super(context, attrs); initialize(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(touchPoints.size() > 0) { DashPathEffect effect = new DashPathEffect(new float[] {7,7}, pathEffectPhase); PointF midpt = null; drawingPaint.setPathEffect(effect); for(int index=1; index<touchPoints.size(); ++index) { midpt = getMidPoint( touchPoints.get(index - 1).x,touchPoints.get(index - 1).y, touchPoints.get(index).x,touchPoints.get(index).y); canvas.drawCircle( touchPoints.get(index - 1).x,touchPoints.get(index - 1).y, 1, drawingPaint); canvas.drawCircle( touchPoints.get(index - 1).x,touchPoints.get(index - 1).y, CIRCLE_RADIUS, drawingPaint); canvas.drawCircle(touchPoints.get(index).x,touchPoints.get(index).y, 1, drawingPaint); canvas.drawCircle(touchPoints.get(index).x,touchPoints.get(index).y, CIRCLE_RADIUS, drawingPaint); canvas.drawLine( touchPoints.get(index - 1).x,touchPoints.get(index - 1).y, touchPoints.get(index).x,touchPoints.get(index).y, drawingPaint); canvas.drawCircle(midpt.x,midpt.y, 10, drawingPaint); } ++pathEffectPhase; invalidate(); } } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int action = event.getAction() & MotionEvent.ACTION_MASK; switch(action) { case MotionEvent.ACTION_DOWN: { invalidate(); break; } case MotionEvent.ACTION_POINTER_DOWN: { isMultiTouch = true; setPoints(event); invalidate(); break; } case MotionEvent.ACTION_POINTER_UP: { isMultiTouch = false; break; } case MotionEvent.ACTION_MOVE: { if(isMultiTouch) { setPoints(event); invalidate(); } break; } } return true; } private void initialize(Context context){ drawingPaint = new Paint(); drawingPaint.setColor(Color.RED); drawingPaint.setStrokeWidth(STROKE_WIDTH); drawingPaint.setStyle(Paint.Style.STROKE); drawingPaint.setAntiAlias(true); touchPoints = new ArrayList<PointF>(); } public void setPoints(MotionEvent event){ touchPoints.clear(); int pointerIndex = 0; for(int index=0; index<event.getPointerCount(); ++index) { pointerIndex = event.getPointerId(index); touchPoints.add(new PointF(event.getX(pointerIndex),event.getY(pointerIndex))); } } private PointF getMidPoint(float x1,float y1, float x2, float y2) { PointF point = new PointF(); float x = x1 + x2; float y = y1 + y2; point.set(x / 2, y / 2); return point; } }
示例图:
相关推荐
综上所述,"Android多点触摸实例代码"涉及到的知识点包括:Android触摸事件处理机制、`MotionEvent`类的理解、自定义`GestureDetector`和`GestureListener`、`Matrix`类的应用以及触摸事件的冲突处理。通过深入研究...
本"android 多点触摸demo"旨在为开发者提供一个实践和理解Android多点触摸功能的实例。这个demo适用于运行Android 2.2(API级别8)及更高版本的设备。 Android系统通过`MotionEvent`类来处理触摸事件,包括单点触摸...
在Android系统中,多点触摸(Multi-Touch)是指设备屏幕能够同时识别并处理两个或更多触点的能力,这是现代智能手机和平板电脑交互的重要特性。Android 2.1版本引入了对多点触摸的支持,使得开发者可以创建更丰富、...
在安卓(Android)平台上,开发多点触控功能是实现用户交互的重要部分,尤其是在创建复杂的触摸界面时。这个“安卓Android源码——多点触控实例源码.zip”压缩包包含了一个具体的多点触控应用的源代码,可以帮助...
这个"Android多点触控实例源码"提供了一个实用的学习资源,帮助开发者深入理解并实践Android中的多点触控技术。以下将详细介绍该源码中的关键知识点。 1. **MotionEvent**:在Android中,处理触摸事件的核心类是`...
本资源"Android多点触控实例源码.rar"提供了一个具体的实例,帮助开发者了解如何在Android应用中实现多点触控功能。 在Android系统中,处理多点触控主要涉及到`MotionEvent`类和`GestureDetector`类。`MotionEvent`...
总之,Android多点触控实例源码提供了一个实际操作的平台,帮助开发者理解和实践多点触控的实现。通过对源码的分析,我们可以学习到如何跟踪和处理多个触摸点,实现复杂的用户交互,如图片的缩放、旋转等。在实际...
一、Android多点触控基础 1. MotionEvent类:在Android中,`MotionEvent`类是用于表示触摸屏幕事件的核心类。它包含了关于触摸事件的所有信息,如动作类型(ACTION_DOWN, ACTION_UP, ACTION_MOVE等)、坐标位置以及...
通过下载并研究"Android 多点触控实例源码.zip",开发者不仅可以加深对Android多点触控机制的理解,还能学习到如何在实际项目中实现这些功能,提高应用的用户体验。同时,该源码也适合作为教学材料,帮助初学者快速...
总的来说,Android多点触控实例源码是一个很好的学习资源,它涵盖了多点触控的基础知识和常见手势的实现方式。通过研究和理解这些源码,开发者可以更好地掌握Android多点触控的实现原理,并将其应用到自己的项目中,...
5. **示例应用**:一个简单的应用实例,演示了多点触摸功能的实际效果,可以运行在模拟器或真实设备上,便于开发者直观地了解多点触摸的工作原理。 总的来说,这个"muti-touch"资源包对于想要实现多点触摸功能的...
这个名为"Android 多点触控实例源码"的压缩包提供了实现这一功能的源代码,对于学习和理解Android多点触控编程具有极大的帮助。 1. **Android多点触控基础** - 触摸事件:Android系统通过`MotionEvent`类处理触摸...
在本实例中,"Android程序研发源码Android 多点触控实例源码.rar" 提供了一个关于如何实现多点触控功能的具体代码示例。这个压缩包中的"mut_test"可能是项目的主要源代码文件夹,包含了实现多点触控功能的相关类和...
在本篇内容中,我们将深入探讨Android多点触摸的实现机制、相关的API以及如何在实践中应用它们。 一、Android多点触摸基础 1. 触摸事件:在Android中,触摸事件主要通过MotionEvent类来处理。MotionEvent包含了...