在Android中捕获多点触控

时间:2015-10-06 03:01:50

标签: android touch

对于我的游戏,我总是使用singletouch,所以我总是在onTouch()方法中跟踪指针,如下所示: 使用event.getPointerId(0)将指针Id置于(0);当pId == 0时,其中pId是指针Id - 当pId!= - 1(当主要指针再次被提升时分配的标准值I)并且如果当前指针索引与指针Id的指针indes不相同时,将不会计算其他指针保存在pId

像这样:

      switch(e.getAction())
      {
        case MotionEvent.ACTION_POINTER_DOWN:
        case MotionEvent.ACTION_DOWN:

            if(pID!=-1)break;
            ...
            pID=e.getPointerId(0);
            ...
            break;

        case MotionEvent.ACTION_MOVE:

            if(pID==-1||e.getActionIndex()!=e.findPointerIndex(pID))break;
            ...
            break;

        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_UP:
            if(pID==-1||e.getActionIndex()!=e.findPointerIndex(pID))break;
            ...
            pID=-1;
            ...
            break;
      }

但是现在我偶然发现了我在2周前写过的代码,其中我以其他方式执行此操作,因为我想对多点触控做出反应(最多允许两个触摸指针进行缩放):

      switch(e.getAction())
      {

        case MotionEvent.ACTION_POINTER_DOWN:
        case MotionEvent.ACTION_DOWN:

            if(tP1.getPointerIndex()==-1&&tP2.getPointerIndex()==-1)
            {
                tP1.setPointerIndex(currentPointerIndex);
                mode=Mode.SINGLE;
            }
            else if(tP1.getPointerIndex()!=-1&&tP2.getPointerIndex()==-1&&!isDragging)
            {
                tP2.setPointerIndex(currentPointerIndex);
                mode=Mode.MULTI;
            }

            if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
            {
                tP1.X=e.getX();
                tP1.Y=e.getY();
                tP1.oldX=tP1.X;
                tP1.oldY=tP1.Y;
            }
            else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
            {
                tP2.X=e.getX();
                tP2.Y=e.getY();
                tP2.oldX=tP2.X;
                tP2.oldY=tP2.Y;
            }
            else break;
            ...
            break;

        case MotionEvent.ACTION_MOVE:
            if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
            {
                tP1.X=e.getX();
                tP1.Y=e.getY();
            }
            else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
            {
                tP2.X=e.getX();
                tP2.Y=e.getY();
            }
            else break;
            ...
            break;

        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_UP:

            if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
            {
                tP1.X=e.getX();
                tP1.Y=e.getY();
            }
            else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
            {
                tP2.X=e.getX();
                tP2.Y=e.getY();
            }
            else break;

            if(mode==Mode.SINGLE)
            {
                mode=Mode.NONE;
                tP1.resetPointerIndex();
            }
            else if(mode==Mode.MULTI)
            {
                mode=Mode.SINGLE;
                if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
                {
                    tP1.resetPointerIndex();
                    tP1.setPointerIndex(tP2.getPointerIndex());
                    tP1.X=tP2.X;
                    tP1.Y=tP2.Y;
                    tP1.oldX=tP2.oldX;
                    tP1.oldY=tP2.oldY;
                    tP2.resetPointerIndex();
                }
                else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
                {
                    tP2.resetPointerIndex();
                }
            }
            break;
      } 

tP1和tP2是跟踪最后x和y坐标以及指针索引的类对象。所以他们代表了两个指针。如果第一个指针被抬起而第二个指针仍然打开,我总是在第一个指针上交换第二个指针。现在它真的很尴尬,因为我为我的一位同事写了这段代码,花了几块钱。

所以我jsut跟踪指针的索引,但它们有时会改变。我没注意到它,因为一切都很好。但现在,当我遇到它时,我注意到了这一点。我该怎么办。我是否需要更改它,或者您认为没有问题让这段代码成为现实吗?

我只是假设它可能出错,因为我不跟踪指针Id但只跟踪指针Index。

此外,在测试时,我从未体验过它,例如第一次触摸时的主指针交换到另一个索引,但是当另一个触摸指针出现故障时为0。

我感到非常愚蠢,以至于我没有注意到它,所以现在我需要一个很好的建议如何表现,请帮助......

代码工作真的很奇怪,因为我这样做:

if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)

所以Android不仅将第一个指针的索引赋值为0,而且还将指针ID分配为0.这段代码是一团糟我认为

0 个答案:

没有答案