安卓--多指触控

1、体验与发现

首先看一下代码:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                Log.i(TAG, "viewSizeHandle: down"+event.getActionIndex());
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                Log.i(TAG, "viewSizeHandle: point down"+event.getActionIndex());
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                Log.i(TAG, "viewSizeHandle: up"+event.getActionIndex());
                break;
            case MotionEvent.ACTION_POINTER_UP:
                Log.i(TAG, "viewSizeHandle: point up"+event.getActionIndex());
            default:
                break;
        }
        return true;
    }

安卓多指触控涉及的触摸事件就只有四个: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获取位置信息

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                Log.i(TAG, "viewSizeHandle: down"+event.getActionIndex());
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                Log.i(TAG, "viewSizeHandle: point down"+event.getActionIndex());
                break;
            case MotionEvent.ACTION_MOVE:
                if(event.getPointerCount()==2){
                    Log.i(TAG, "onTouchEvent:0 x:"+event.getX(0)+" y:"+event.getY(0));
                    Log.i(TAG, "onTouchEvent:1 x:"+event.getX(1)+" y:"+event.getY(1));
                }
                break;
            case MotionEvent.ACTION_UP:
                Log.i(TAG, "viewSizeHandle: up"+event.getActionIndex());
                break;
            case MotionEvent.ACTION_POINTER_UP:
                Log.i(TAG, "viewSizeHandle: point up"+event.getActionIndex());
            default:
                break;
        }
        return true;
    }

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

  • 一个触控点,我们就直接认为是简单的移动事件,比如拖拽的逻辑等
  • 两个触控点,也许你会写什么放大缩小的逻辑
  • 三个触控点,这是三指切换应用什么的
  • 根据需要写逻辑,以上知识举例
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 多点触控详解,在前面的几篇文章中我们大致了解了 Android 中的事件处理流程和一些简单的处理方...
    吕侯爷阅读 6,011评论 3 17
  • 处理多点触控手势 多点触控就是同时把一根以上的手指放在屏幕上。 再继续往下以前需要补充一些名词(弄清楚这些对理解下...
    uncle_charlie阅读 4,339评论 0 5
  • 开篇 最近在研究自定义View方面的知识。而自定义View中很重要的一块就是View的交互。这就牵涉到本系列文章要...
    张利强阅读 10,307评论 2 17
  • 大多数人眼中的周末,应该是闲暇并有趣的,早早就会在心里计划着,盼啊盼,就等着把该做的事都做了。 在周末,每个人都可...
    陈汐年阅读 549评论 11 9
  • 经过了昨天的紧张的兴奋的考验,发现自己已经可以很从容的应对啦! 工作室今天依然忙碌,纹绣的、艾灸体验的、艾灸...
    艾灸养生娟娟阅读 269评论 0 0