Android: 一个两点触控的案例

下面是一个两点触控的案例代码:

package com.zzj;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;

public class AndroidTestActivity extends Activity {
    private float x0, y0;
    private float x1, y1;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public boolean onTouchEvent(MotionEvent event) {
        int pointerCount = event.getPointerCount();
        int action = event.getAction();
        if (pointerCount == 1) {
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                x0 = event.getX(0);
                y0 = event.getY(0);
                System.out.println("ACTION_DOWN pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_UP:
                System.out.println("ACTION_UP pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_MOVE:
                System.out.println("ACTION_MOVE pointerCount=" + pointerCount);
                break;
            }
        }
        if (pointerCount == 2) {
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                x0 = event.getX(0);
                y0 = event.getY(0);
                System.out.println("ACTION_DOWN pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_UP:
                System.out.println("ACTION_UP pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_MOVE:
                System.out.println("ACTION_MOVE pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_POINTER_1_DOWN:
                System.out.println("ACTION_POINTER_1_DOWN pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_POINTER_1_UP:
                System.out.println("ACTION_POINTER_1_UP pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_POINTER_2_DOWN:
                System.out.println("ACTION_POINTER_2_DOWN pointerCount=" + pointerCount);
                break;
            case MotionEvent.ACTION_POINTER_2_UP:
                System.out.println("ACTION_POINTER_2_UP pointerCount=" + pointerCount);
                break;
            }
        }
        return super.onTouchEvent(event);
    }
}

下面是该案例的一些分析要点:1)使用event.getPointerCount()来获取当前触控点的个数。并判断触控点,来分别对不同的点进行事件处理。

                2)使用event.getAction()来获取当前的事件码,单点按下、松开和移动的事件分别是:MotionEvent.ACTION_DOWN、ACTION_UP、ACTION_MOVE;第二个点按下、松开和移动的事件分别是ACTION_POINTER_2_DOWN、                                    ACTION_POINTER_2_UP、ACTION_MOVE,注意,单点和两点响应相同的移动事件,即ACTION_MOVE。

                3)只有第二个点按下之后,才会响应MotionEvent.ACTION_POINTER_1_DOWN、MotionEvent.ACTION_POINTER_1_UP,初次单击是不响应这两个事件码的。这点切记。

                4)通过event.getX(0)、event.getY(0)来获取第一个点的坐标值,通过event.getX(1)、event.getY(1)来获取第二个点的坐标值。如果有更多的点,依次类推。

时间: 2024-10-12 17:53:49

Android: 一个两点触控的案例的相关文章

android点滴之触控相关知识点(持续更新)

1.检查当前屏幕有多少个触摸点. 使用MotionEvent的getPointerCount()方法. 2.多点触控下,触摸的状态的检测 MotionEvent类中方法getActionMasked(),这个方法可以检查触摸的状态: 当只有一个触摸点时(只用一根手指触摸屏幕),按下是0,起来是1,移动是2: 当触摸点多于1时(多根手指触摸屏幕),按下是5,起来是6,移动是2: 3.多点触控下,每个触点的分类处理 多点触摸时 假如是第i个点 int x = event.getX(i); int y

Android实现多点触控,自由缩放图片

Android多点触控涉及到的知识点 1.ScaleGestureDetector 2.OnScaleGestureListener 3.Matrix 4.OnTouchListener 四个知识点需要了解一下,需要注意的是Matrix在内存中是一个一维数组,操控图片的Matrxi是一个3X3的矩阵,在内存中也就是一个大小为9的一维数组. 实现多点触控,自由变化图片 1. ImageView的基础上继承 2.因为要在图片加载完成就获取到相关的属性,所以实现OnGlobalLayoutListen

Opengl es Android 3D 手指触控旋转object

明确原理: 先确定一下OpenGL里面的坐标为:x轴正方向为屏幕向右,y轴正方向为屏幕向上,z轴正方向为屏幕由里向外. 当手指在X轴方向上移动时,画面中物体应绕Y轴方向旋转,则为gl.glRotatef(Angle,0,1,0); 当手指在Y轴方向上移动时,画面中物体应绕X轴方向旋转,则为gl.glRotatef(Angle,1,0,0); 除此之外,android中屏幕响应手势移动所应用的function为:onTouchEvent. 下面展示代码: private final float T

Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt【转】

转自:http://blog.csdn.net/droidphone/article/details/8434768 [-] 简介 协议的使用 Protocol Example A Protocol Example B 事件的使用 事件的语义说明 ABS_MT_TOUCH_MAJOR ABS_MT_TOUCH_MINOR ABS_MT_WIDTH_MAJOR ABS_MT_WIDTH_MINOR ABS_MT_PRESSURE ABS_MT_DISTANCE ABS_MT_ORIENTATION

Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt768

转自:http://blog.csdn.net/droidphone/article/details/8434768 Multi-touch (MT) Protocol ------------------------- Copyright(C) 2009-2010 Henrik Rydberg<[email protected]> 简介 ------------ 为了发挥新近的多点触摸和多用户设备的强大功能,为多点触摸定义一种上报详细数据的方法(比如有多个物体直接接触到设备的表面),是非常有

Android多点触控技术

1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouch技术,对于网页缩放.手势操作上有更好的用户体验. 在Android平台上事件均使用了MotionEvent对象方式处理,比如开始触控时会触发ACTION_DOWN,而移动操作时为 ACTION_MOVE,最终放开手指时触发ACTION_UP事件.当然还有用户无规则的操作可能触发ACTION_CAN

关于android多点触控

最近项目需要一个多点触控缩放的功能.然后上网查了下资料 总结一下: 首先android sdk版本很重要,比如你在AndroidManifest.xml中指定android:minSdkVersion="4"  并且建工程的时候选的是android 2.2就表示你的应用兼容android1.6~android2.2 之间的版本.但是多点触控的API在1.6~~2,1~~,2,2~~三个版本中都是不一样的.比如android2.2中onTouchEvent(MotionEvent eve

Android开发实例之多点触控程序

智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣.实际上多点触控程序的实现并不是那么遥不可及,而是比较容易.本文就主要通过一个实例具体讲解多点触控程序的实现. 首先来了解一下Android中多点触控的原理. Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouch技术,对于网页缩放.手势操作上有更好

Android多点触控(图片的缩放Demo)

本文主要介绍Android的多点触控,使用了一个图片缩放的实例,来更好的说明其原理.需要实现OnTouchListener接口,重写其中的onTouch方法. 实现效果图: 源代码: 布局文件: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&quo