android 多点触控

如何判断android是否支持多点触摸:

可以通过两种方式判断:

1. 通过JAVA的反射原理,关数类MotionEvent是否包含方法多点触摸的方法


支持多点触摸的方法getPointerCount,getPointerId是后来加上去的,如果类没有这两个方法,说明手机不支持多点触摸

		boolean multiTouchAvailable1 = false;
		boolean multiTouchAvailable2 = false;
		// Not checking for getX(int), getY(int) etc 'cause I'm lazy
		Method methods [] = MotionEvent.class.getDeclaredMethods();
		for(Method m: methods) 
		{
			if( m.getName().equals("getPointerCount") )
				multiTouchAvailable1 = true;
			if( m.getName().equals("getPointerId") )
				multiTouchAvailable2 = true;
		}

		if (multiTouchAvailable1 && multiTouchAvailable2)
			return true;    //支持多点触摸
		else
			return false;



2. 通过判断android手机build的版本号
Build.VERSION.SDK

 

 

2011.10.17——— android 多点触控
参考:http://blog.csdn.net/ldj299/article/details/6422547

测试代码如下:

自定义view

01.package com.lp.multi;  
02.  
03.import android.content.Context;  
04.import android.graphics.Canvas;  
05.import android.graphics.Color;  
06.import android.graphics.Paint;  
07.import android.util.AttributeSet;  
08.import android.util.Log;  
09.import android.view.MotionEvent;  
10.import android.view.View;  
11.  
12.public class MyView extends View{  
13.  
14.    public MyView(Context context, AttributeSet attrs, int defStyle) {  
15.        super(context, attrs, defStyle);  
16.        // TODO Auto-generated constructor stub  
17.    }  
18.  
19.    public MyView(Context context, AttributeSet attrs) {  
20.        super(context, attrs);  
21.        // TODO Auto-generated constructor stub  
22.    }  
23.  
24.    public MyView(Context context) {  
25.        super(context);  
26.        // TODO Auto-generated constructor stub  
27.    }  
28.  
29.    @Override  
30.    protected void onDraw(Canvas canvas) {  
31.        Paint mPaint = new Paint();  
32.        mPaint.setColor(Color.GRAY);  
33.        mPaint.setTextSize(30);  
34.        canvas.drawText("呵呵", 100, 200, mPaint);  
35.    }  
36.  
37.    @Override  
38.    public boolean onTouchEvent(MotionEvent event) {  
39.  
40.        int pointCount = event.getPointerCount();  
41.        System.out.println(pointCount);  
42.        if (pointCount == 2) {  
43.            final float x0 = event.getX(event.getPointerId(0));  
44.            final float y0 = event.getY(event.getPointerId(0));  
45.  
46.            final float x1 = event.getX(event.getPointerId(1));  
47.            final float y1 = event.getY(event.getPointerId(1));  
48.  
49.            switch (event.getAction()) {  
50.                case MotionEvent.ACTION_POINTER_2_DOWN:  
51.                    System.out.println("ACTION_POINTER_2_DOWN");  
52.                    break;  
53.                case MotionEvent.ACTION_POINTER_1_DOWN:  
54.                    System.out.println("ACTION_POINTER_1_DOWN");  
55.                    break;  
56.                case MotionEvent.ACTION_POINTER_1_UP:  
57.                    System.out.println("ACTION_POINTER_1_UP");  
58.                    break;  
59.                case MotionEvent.ACTION_POINTER_2_UP:  
60.                    System.out.println("ACTION_POINTER_2_UP");  
61.                    break;  
62.                case MotionEvent.ACTION_MOVE: {  
63.                    System.out.println("ACTION_MOVE");  
64.                    break;  
65.                }  
66.            }  
67.              
68.            System.out.println(x0+" "+x1+" "+y0+" "+y1);  
69.        }  
70.  
71.        return true;  
72.    }  
73.      
74.      
75.      
76.  
77.} 

注意:
onTouchEvent返回true 要不是没有效果的

  1. package com.lp.multi;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5.   
  6. public class MainActivity extends Activity {  
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(new MyView(this));  
  12.     }  
  13. }  



运行结果:


Java代码   收藏代码
  1. 10-17 17:53:32.269: INFO/System.out(11675): 1  
  2. 10-17 17:53:32.279: INFO/System.out(11675): 2  
  3. 10-17 17:53:32.279: INFO/System.out(11675): ACTION_POINTER_2_DOWN  
  4. 10-17 17:53:32.279: INFO/System.out(11675): 324.3229 201.57916 88.79375 226.62125  
  5. 10-17 17:53:32.289: INFO/System.out(11675): 2  
  6. 10-17 17:53:32.289: INFO/System.out(11675): ACTION_MOVE  
  7. 10-17 17:53:32.299: INFO/System.out(11675): 324.3229 201.57916 88.79375 226.62125  
  8. 10-17 17:53:32.299: INFO/System.out(11675): 2  
  9. 10-17 17:53:32.299: INFO/System.out(11675): ACTION_POINTER_1_UP  
  10. 10-17 17:53:32.309: INFO/System.out(11675): 324.3229 201.57916 88.79375 226.62125  
  11. 10-17 17:53:32.309: INFO/System.out(11675): 1  



结论:

1、ACTION_POINTER_2_DOWN和ACTION_POINTER_1_DOWN 可能只会触发一个
2、事件只触发了一个,但是坐标都是能得到的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值