Detect how to use ViewDragHelper to custom ViewGroup
##DEMO EFFECT
##ViewDragHelper
1.ViewDragHelper
//ViewDragHelper,1.0,
mViewDragHelper = ViewDragHelper.create(this, 1.0f, new DragHelperCallBack());
//..
mViewDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);
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()``````ViewDragHelper
touch
@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);
//
}
}
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);
}
}