Android笔记 MotionEvent多点触控

 在一个空的acyivity上重写onTouchEvent方法做的两点触控(因为tp不支持三点的原因,只能做两点的)实验

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getActionMasked();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                int index = event.getActionIndex();
                int id = event.getPointerId(index);
                //float x = event.getX(event.findPointerIndex(id));
                Log.v("xml_log_empty","ACTION_DOWN index=" + index +" ;id="+id);
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                int index2 = event.getActionIndex();
                int id2 = event.getPointerId(index2);
                Log.v("xml_log_empty","ACTION_POINTER_DOWN index=" + index2 +" ;id="+id2);
                break;
            case MotionEvent.ACTION_MOVE:
                int index3 = event.getActionIndex();
                int id3 = event.getPointerId(index3);
                Log.v("xml_log_empty","ACTION_MOVE index=" + index3+" ;id="+id3);
                break;
            case MotionEvent.ACTION_POINTER_UP:
                int index4 = event.getActionIndex();
                int id4 = event.getPointerId(index4);
                Log.v("xml_log_empty","ACTION_POINTER_UP index=" + index4 +" ;id="+id4);
                break;
            case MotionEvent.ACTION_UP:
                int index5 = event.getActionIndex();
                int id5 = event.getPointerId(index5);
                Log.v("xml_log_empty","ACTION_UP index=" + index5 +" ;id="+id5);
                break;
        }
        return false;
    }

①:在第一个点(后面简称点1)触摸到屏幕的时候会触发ACTION_DOWN,打印结果【ACTION_DOWN index=0 ;id=0】;

②:点1移动触发ACTION_MOVE,打印结果【ACTION_DOWN index=0 ;id=0】;

③:第二个点(后面简称点2)触摸到屏幕会触发ACTION_POINTER_DOWN,打印结果【ACTION_POINTER_DOWN index=1 ;id=1】;

④:两点一起移动触发ACTION_MOVE,打印结果【ACTION_MOVE index=0 ;id=0】,这里只有点1的信息被打印出来了,如果想要操作点2,那么在ACTION_POINTER_DOWN的时候就应该把点2的id记下来(为什么不记index?);

⑤:抬起点1触发ACTION_POINTER_UP,打印结果【ACTION_POINTER_UP index=0 ;id=0】,打印出来的是被抬起的点1的信息;

⑥:继续移动点2,触发ACTION_MOVE,打印结果【ACTION_MOVE index=0 ;id=1】,发现点2因为点1的离开,index发生了变化,但是id仍然没变,这就解答了步骤④的问题,因为index会变化,所以不去记它,通过id去定位点才是准确;

⑦:加入点3,触发ACTION_POINTER_DOWN,打印结果【ACTION_POINTER_DOWN index=0 ;id=0】,发现原本已经用过的0,又被附在了新的点上,而且index也插到了前面,可以理解为原来的点回来了;

⑧:两点一起移动触发ACTION_MOVE,打印结果【ACTION_MOVE index=0 ;id=0】,可以得出结论,move的时候得到的点是index为0时的点;

⑨:点2离开,触发ACTION_POINTER_UP,打印结果【ACTION_POINTER_UP index=1 ;id=1】;

⑩:点1离开,此时所有点都离开了,才会触发ACTION_UP,打印结果【ACTION_UP index=0 ;id=0】,当然打印出来的信息,也是剩下的那个点的信息。

但是通过event获取每一个点的信息(x,y,压力等),所调用的方法所需要的参数却是index,可以index却是有可能会变化的,那就需要通过id去找到对应的index了,findPointerIndex(id)方法就是通过id得到对应的index的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值