Multi-touch 구현

 

 
 public boolean onTouchEvent(final MotionEvent event)
 {
     final int action = event.getAction();
     if(mIsMultiTouchSupported)
     {
      switch (action & MotionEvent.ACTION_MASK)
       {
        case  MotionEvent.ACTION_POINTER_DOWN : {
      if(mActivePointerId == -1)
      {
             final int pind = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
             int pid = event.getPointerId(pind);
             final int x = (int)event.getX(pid);
             final int y = (int)event.getY(pid);
             
             if(pointInArea(x, y))
             {
              mActivePointerId = pid;
              
                // System.out.println("down pointer x = "+x+" , y = "+y);
                onAction(UIAREA_ACTION_DOWN, x, y);
             }
      }
        }
         break;
        case MotionEvent.ACTION_DOWN: {
         if(mActivePointerId == -1)
         {
             final int x = (int)event.getX();
             final int y = (int)event.getY();
             if(pointInArea(x, y))
             {
              mActivePointerId = event.getPointerId(0);
             // System.out.println("down x = "+x+" , y = "+y);
              onAction(UIAREA_ACTION_DOWN, x, y);
             }
         }
        
            break;
        }
            
        case MotionEvent.ACTION_MOVE: {
         if(mActivePointerId != -1)
         {
             // Find the index of the active pointer and fetch its position
             final int pointerIndex = event.findPointerIndex(mActivePointerId);
             final int x = (int)event.getX(pointerIndex);
             final int y = (int)event.getY(pointerIndex);
             onAction(UIAREA_ACTION_MOVE, x, y);
         }
  
            break;
        }
            
        case MotionEvent.ACTION_CANCEL: {
            mActivePointerId = -1;
            break;
        }
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP: {
            final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
            final int pointerId = event.getPointerId(pointerIndex);
            if (pointerId == mActivePointerId) {

             final int x = (int)event.getX(mActivePointerId);
             final int y = (int)event.getY(mActivePointerId);
                mActivePointerId = -1;
               // System.out.println(" up x = "+x+" , y = "+y);
                onAction(UIAREA_ACTION_UP, x, y);
            }
            break;
        }
       }//end of switch      
     }
     else
     {
      switch (action)
      {
        case MotionEvent.ACTION_DOWN: {
            final int x = (int)event.getX();
            final int y = (int)event.getY();
            if(pointInArea(x, y))
            {
            // System.out.println("down x = "+x+" , y = "+y);
             onAction(UIAREA_ACTION_DOWN, x, y);
            }
            break;
        }
            
        case MotionEvent.ACTION_MOVE: {
            final int x = (int)event.getX();
            final int y = (int)event.getY();
            if(pointInArea(x, y))
            {
            // System.out.println("move x = "+x+" , y = "+y);
             onAction(UIAREA_ACTION_MOVE, x, y);
            }
            break;
        }
            
        case MotionEvent.ACTION_CANCEL: {
            break;
        }
        case MotionEvent.ACTION_UP:{
            final int x = (int)event.getX();
            final int y = (int)event.getY();
               onAction(UIAREA_ACTION_UP, x, y);
            break;
        }
      }//end of switch
     }     
   return true;
 }
 
 

Comments

Popular posts from this blog

Media Volume 만 조정도록 볼륨키 수정하기