• 安卓--多指触控


    1、体验与发现

    首先看一下代码:

    1. @Override
    2. public boolean onTouchEvent(MotionEvent event) {
    3. switch (event.getActionMasked()) {
    4. case MotionEvent.ACTION_DOWN:
    5. Log.i(TAG, "viewSizeHandle: down"+event.getActionIndex());
    6. break;
    7. case MotionEvent.ACTION_POINTER_DOWN:
    8. Log.i(TAG, "viewSizeHandle: point down"+event.getActionIndex());
    9. break;
    10. case MotionEvent.ACTION_MOVE:
    11. break;
    12. case MotionEvent.ACTION_UP:
    13. Log.i(TAG, "viewSizeHandle: up"+event.getActionIndex());
    14. break;
    15. case MotionEvent.ACTION_POINTER_UP:
    16. Log.i(TAG, "viewSizeHandle: point up"+event.getActionIndex());
    17. default:
    18. break;
    19. }
    20. return true;
    21. }

    安卓多指触控涉及的触摸事件就只有四个:ACTION_DOWN、ACTION_POINTER_DOWN、ACTION_UP、ACTION_POINTER_UP

    ACTION_MOVE是不包含其中的,感觉有点坑
    以下都是默认在一次多指触控过程中:

    •         ACTION_DOWN:触控时,总是第一个被触发,之后就不会再触发
    • ACTION_POINTER_DOWN:只要还有触控点在屏幕上,之后手指下去都是之触发这个事件
    •          ACTION_UP:触控点离开时,仅当最后一个触控点消失时才会触发
    •   ACTION_POINTER_UP:只要还有触控点在屏幕上,每当手指离开都会触发这个事件
    •      ACTION_MOVE:可以获取按下触控点的位置(getX和getY)

    过程:手指1 down →手指2 down →手指3 down → 手指3 up → 手指2 up →手指1 up

    可以看到,第一个下去的才会触发ACTION_DOWN,最后一个起来才会触发ACTION_UP

    具体自己去体验吧,很简单的代码,实验起来也很简单,在activity贴上代码,慢慢点吧。

    2、重要的方法

    getPointerCount():返回触控点总数
    getActionMasked():用这个方法才能出现掩盖多指触控的事件
    getActionIndex():屏幕上每个手指,都对应一个index,返回触发按下抬起动作的**下标**index
    getX (int pointerIndex): 获取指定触控点的X坐标
    getY (int pointerIndex) :获取指定触控点的Y坐标

    知道上面这些,就靠你自己发挥了,重点是,要记录x,y和善用随后一个才会出现的ACTION_UP

    3、在ACTION_MOVE获取位置信息

    1. @Override
    2. public boolean onTouchEvent(MotionEvent event) {
    3. switch (event.getActionMasked()) {
    4. case MotionEvent.ACTION_DOWN:
    5. Log.i(TAG, "viewSizeHandle: down"+event.getActionIndex());
    6. break;
    7. case MotionEvent.ACTION_POINTER_DOWN:
    8. Log.i(TAG, "viewSizeHandle: point down"+event.getActionIndex());
    9. break;
    10. case MotionEvent.ACTION_MOVE:
    11. if(event.getPointerCount()==2){
    12. Log.i(TAG, "onTouchEvent:0 x:"+event.getX(0)+" y:"+event.getY(0));
    13. Log.i(TAG, "onTouchEvent:1 x:"+event.getX(1)+" y:"+event.getY(1));
    14. }
    15. break;
    16. case MotionEvent.ACTION_UP:
    17. Log.i(TAG, "viewSizeHandle: up"+event.getActionIndex());
    18. break;
    19. case MotionEvent.ACTION_POINTER_UP:
    20. Log.i(TAG, "viewSizeHandle: point up"+event.getActionIndex());
    21. default:
    22. break;
    23. }
    24. return true;
    25. }

    只是在ACTION_MOVE获取对应的X和Y,那么你可以判断触控点的数量来实现逻辑,比如:

    • 一个触控点,我们就直接认为是简单的移动事件,比如拖拽的逻辑等
    • 两个触控点,也许你会写什么放大缩小的逻辑
    • 三个触控点,这是三指切换应用什么的
    • 根据需要写逻辑,以上知识举例
  • 相关阅读:
    JAVA学习-java基础讲义02
    Netty实战(二)
    PDF文件怎么打开
    20000字深度讲解 Python 数据可视化神器 Plotly
    文件的操作
    PC应用管理工具 连接流程图 支持所有android手机或设备 批量设备批量应用安装卸载等管理 OS升级 push文件夹等
    Go语言函数基本概念
    教你自己制作一个ALU
    只有程序员才能看懂的16张高端漫画
    Maven创建父子工程详解
  • 原文地址:https://blog.csdn.net/m0_72429728/article/details/127175996