21、多点触摸技术

什么是多点触摸技术

       多点触摸是一项很早就使用的技术,从IPhone第一代就支持多点触摸。要想了解什么叫多点触摸,首先应了解什么是单点触摸。早期的触摸屏无论有多少个手指接触到屏幕,系统只会认为第1个接触到屏幕的手指是有效的,后来接触到屏幕的手指将被忽略。这就是所谓单点触摸,单点就是指第1个接触到屏幕的手指。

      了解了单点触摸,多点触摸就很容易理解了。所谓多点触摸就是系统同时接受多个手指触摸屏幕的动作。这些手指的按下、移动等操作所生成的数据都可以通过程序获取。根据这些数据的变化可以做出很多有趣的应用,例如,图像的放大和缩小就是典型的多点触摸应用,当两个或多个手指向内收缩时,图像按着一定比例缩小,当两个或多个手指向外扩张时,图像就会按一定比例放大。

Android对多点触摸的支持

       Android SDK从2.0开始支持多点触摸,不过最初只支持两点触摸(屏幕最多能检测到两个手指的触摸动作),而最新的Android版本支持五点触摸。当然,大多数应用只需要两个手指就够了。

如何使用多点触摸

onTouchEvent事件方法

MotionEvent.getX(int pointerIndex)

MotionEvent.getY(int pointerIndex)

MotionEvent.getHistoricalX(int pointerIndex, int pos)

MotionEvent.getHistoricalY(int pointerIndex, int pos)

Demo
 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.util.Log;
 4 import android.view.MotionEvent;
 5 
 6 public class MultiTouchActivity extends Activity {
 7 
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity_multi_touch);
12     }
13 
14     public boolean onTouchEvent(MotionEvent event) {
15         // 只有是亮点触摸才执行
16         if (event.getPointerCount() == 2) {
17             if (event.getAction() == MotionEvent.ACTION_MOVE) {
18                 int historySize = event.getHistorySize();
19                 if (historySize == 0)
20                     return true;
21 
22                 // 获取第一个手指当前的纵坐标
23                 float currentY1 = event.getY(0);
24                 // 获取第一个手指最新的历史纵坐标
25                 float historyY1 = event.getHistoricalY(0, historySize - 1);
26 
27                 // 获取第二个手指当前的纵坐标
28                 float currentY2 = event.getY(1);
29                 // 获取第二个手指最新的历史纵坐标
30                 float historyY2 = event.getHistoricalY(1, historySize - 1);
31 
32                 // 两手指当前纵坐标的距离
33                 float distance = Math.abs(currentY1 - currentY2);
34                 // 两手指最新的历史纵坐标的距离
35                 float historyDistance = Math.abs(historyY1 - historyY2);
36 
37                 if (distance > historyDistance) {
38                     Log.d("status", "放大");
39 
40                 } else if (distance < historyDistance) {
41                     Log.d("status", "缩小");
42                 } else {
43                     Log.d("status", "移动");
44                 }
45 
46             }
47         }
48         return true;
49     }
50 
51 }

 

 
 

转载于:https://www.cnblogs.com/androidsj/p/3935114.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值