zoukankan      html  css  js  c++  java
  • 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 }
     
     
  • 相关阅读:
    性能监控工具之----PerfMon Metrics Collector
    idea 常用设置记录
    springboot 初体验之踩坑篇
    Interleave controller-jmeter
    js怎么判断一个类型是否为数组类型
    加载完成事件
    Jquery-查找
    Dom-增加、删除
    Dom-修改
    Dom-查找
  • 原文地址:https://www.cnblogs.com/androidsj/p/3935114.html
Copyright © 2011-2022 走看看