android 多点触控

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

主要API:

Java代码   收藏代码
  1. event.getPointerCount():触控点的个数  
  2. getPointerId(int pointerIndex):pointerIndex从0到getPointerCount-1,返回一个触摸点的标示  
  3. getX(int pointerIndex):通过标示来得到X坐标  
  4. getY(int pointerIndex):通过标示来得到Y坐标  
  5. MotionEvent.ACTION_POINTER_1_DOWN:第一个触摸点点击事件  
  6. MotionEvent.ACTION_POINTER_2_DOWN:第二个触摸点点击事件  
  7. MotionEvent.ACTION_POINTER_1_UP:第一个触摸点松开事件  
  8. MotionEvent.ACTION_POINTER_2_UP:第二个触摸点松开事件  


测试代码如下:

自定义view

Java代码   收藏代码
  1. package com.lp.multi;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.util.AttributeSet;  
  8. import android.util.Log;  
  9. 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("呵呵"100200, 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 要不是没有效果的



Activity
Java代码   收藏代码
  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、事件只触发了一个,但是坐标都是能得到的


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值