DrawerView

Detect how to use ViewDragHelper to custom ViewGroup

Stars
11

##DEMO EFFECT DEMO

##ViewDragHelper

1.ViewDragHelper


        //ViewDragHelper,1.0,
        mViewDragHelper = ViewDragHelper.create(this, 1.0f, new DragHelperCallBack());
        
        //..
        mViewDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);
  1. onInterceptTouchEvent() ViewDragHelper

          @Override
           public boolean onInterceptTouchEvent(MotionEvent ev) {
               final int action = MotionEventCompat.getActionMasked(ev);
               if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
                   mViewDragHelper.cancel();
                   return false;
               }
       
               //,
       
               return mViewDragHelper.shouldInterceptTouchEvent(ev);//,
           }

3.onTouchEvent()``````ViewDragHelpertouch


    @Override
       public boolean onTouchEvent(MotionEvent event) {
           //ViewragHelpertouch
           mViewDragHelper.processTouchEvent(event);
           //event
   
           return true;
       }

4.CallBack

     
     private class DragHelperCallBack extends ViewDragHelper.Callback {
     
             @Override
             public boolean tryCaptureView(View child, int pointerId) {
                 //view
                 return mDragView == child;
             }
             
             @Override
              public void onViewCaptured(View capturedChild, int activePointerId) {
                   super.onViewCaptured(capturedChild, activePointerId);
                   //view,view whatever you want
              }
     
             @Override
             public void onEdgeDragStarted(int edgeFlags, int pointerId) {
                 // captureview
                 if (edgeFlags == ViewDragHelper.EDGE_RIGHT) {
                     mViewDragHelper.captureChildView(mDragView, pointerId);
                 }
             }
             
     
             @Override
             public int clampViewPositionHorizontal(View child, int left, int dx) {
                //,child 
                //clampViewPositionVertical 
                 if (child == mDragView) {
                     float rectLeft = getWidth() - mDragMaxWidth;
                     float rightRight = getWidth();
                     //mDragView getWidth() - mDragMaxWidth  getWidth
                     //
                     return (int) Math.min(Math.max(left, rectLeft), rightRight);
                 } else {
                     return left;
                 }
             }
     
             @Override
             public int getViewHorizontalDragRange(View child) {
             //
                 return mDragMaxWidth;
             }
             
              @Override
              public int getViewVerticalDragRange(View child) {
                  //
                 return mDragMaxHeight;
              }
     
             @Override
             public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
     
                 /**
                 view
                 changedView
                 requestLayout();
                 
                   left
                   top
                 
                 */
             }
     
             @Override
             public void onViewReleased(View releasedChild, float xvel, float yvel) {
                  //  xvel   ->  
                  //  xvel   ->  
                 /**
                   Capture
                     mViewDragHelper.settleCapturedViewAt(getWidth(), 0);
                   viewleft,top
                 */
             }
     
             @Override
             public void onViewDragStateChanged(int state) {
                 super.onViewDragStateChanged(state);
                 //
             }
     
         }
  
  1. ViewGroup onComputeScroll()
  
      @Override
      public void computeScroll() {
          /**
           * viewDragHelper{@link android.widget.Scroller Scroller}
           */
          if (mViewDragHelper.continueSettling(true)) {//
              //Invalidate,
              ViewCompat.postInvalidateOnAnimation(this);
          }
      }

6.smoothView

   
     /**
          * 
          * {@link ViewDragHelper#smoothSlideViewTo(View, int, int)}view
          */
         private void smoothSlideTo() {
            
             /**
              * {@link ViewDragHelper#continueSettling(boolean)}
              * invalidate
              * */
             if (mViewDragHelper.smoothSlideViewTo(mDragView, offset, mDragView.getTop())) {
                 ViewCompat.postInvalidateOnAnimation(this);
             }
         }
  
Related Projects