Code example for MotionEvent

Methods: getActionIndexgetActionMaskedgetRawXobtainoffsetLocation

0
 
 @Override 
 public boolean onTouch(View view, MotionEvent motionEvent) 
 { 
	  
     motionEvent.offsetLocation(mTranslationX, 0);
 
     mViewWidth = mView.getWidth();
 
     switch (motionEvent.getActionMasked()) 
     { 
      
      
         case MotionEvent.ACTION_DOWN: 
        	  
        	 mActionDownXCoordinate = motionEvent.getRawX();
             mVelocityTracker = VelocityTracker.obtain();
             mVelocityTracker.addMovement(motionEvent);
             view.onTouchEvent(motionEvent);
              
             return true; 
                       
 
              
         case MotionEvent.ACTION_UP:
        	  
	             if (mVelocityTracker == null) 
	             { 
	            	  
	                 break; 
	             } 
 
             float deltaXActionUp = motionEvent.getRawX() - mActionDownXCoordinate;
              
             mVelocityTracker.addMovement(motionEvent);
              
             mVelocityTracker.computeCurrentVelocity(1000);
              
              
             float velocityX = Math.abs(mVelocityTracker.getXVelocity());
             float velocityY = Math.abs(mVelocityTracker.getYVelocity());
              
             boolean dismiss = false;
             boolean dismissRight = false;
              
              
	             if (Math.abs(deltaXActionUp) > mViewWidth / 2) 
	             { 
	            	  
	                 dismiss = true;
	                 dismissRight = deltaXActionUp > 0;
	                  
	             }  
              
	             else if (mMinFlingVelocity <= velocityX && velocityX <= mMaxFlingVelocity && velocityY < velocityX) 
	             { 
	            	  
	                 dismiss = true;
	                 dismissRight = mVelocityTracker.getXVelocity() > 0;
	                  
	             } 
	              
	              
	             if (dismiss) 
	             { 
	            	  
	            	 mView.animate()
	                         .translationX(dismissRight ? mViewWidth : -mViewWidth)
	                         .alpha(0)
	                         .setDuration(mAnimationTime)
	                         .setListener(new AnimatorListenerAdapter() 
	                         { 
	                             @Override 
	                             public void onAnimationEnd(Animator animation) 
	                             { 
	                            	  
	                                 performDismiss(); 
	                                  
	                             } 
	                         }); 
                  
	             } 
	              
	             else  
	             { 
	            	  
	             // User has cancelled action	  
                 mView.animate()
                         .translationX(0)
                         .alpha(1)
                         .setDuration(mAnimationTime)
                         .setListener(null);
                  
	             } 
	              
	         mVelocityTracker.recycle();
             mTranslationX = 0;
             mActionDownXCoordinate = 0;
             isSwiping = false;
              
             break; 
                       
 
              
         case MotionEvent.ACTION_MOVE: 
         
	             if (mVelocityTracker == null) 
	             { 
	            	  
	                 break; 
	                  
	             } 
 
             mVelocityTracker.addMovement(motionEvent);
              
             float deltaXActionMove = motionEvent.getRawX() - mActionDownXCoordinate;
              
	             if (Math.abs(deltaXActionMove) > mScaledTouchSlop) 
	             { 
	            	  
	            	 isSwiping = true;
	                 mView.getParent().requestDisallowInterceptTouchEvent(true);
	 
	                 // Cancel listview's touch 
	                 MotionEvent cancelEvent = MotionEvent.obtain(motionEvent);
	                 cancelEvent.setAction(MotionEvent.ACTION_CANCEL |
	                     (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
	                 mView.onTouchEvent(cancelEvent);
	                  
	                 cancelEvent.recycle();
	                  
	             }