下面列出了android.support.v4.widget.ViewDragHelper#EDGE_BOTTOM 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) {
final int childWidth = releasedChild.getWidth();
final int childHeight = releasedChild.getHeight();
int left = 0, top = 0;
if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_LEFT) != 0) {
left = xvel > 0 || xvel == 0 && mScrollPercent > SCROLL_FINISH_THRESHOLD ? (childWidth) : 0;
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_RIGHT) != 0) {
left = xvel < 0 || xvel == 0 && mScrollPercent > SCROLL_FINISH_THRESHOLD ? -(childWidth) : 0;
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_TOP) != 0) {
top = yvel < 0 || yvel == 0 && mScrollPercent > SCROLL_FINISH_THRESHOLD ? (childHeight) : 0;
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_BOTTOM) != 0) {
top = yvel < 0 || yvel == 0 && mScrollPercent > SCROLL_FINISH_THRESHOLD ? -(childHeight) : 0;
}
mDragHelper.settleCapturedViewAt(left, top);
invalidate();
}
@Override
public void onEdgeDragStarted(int edgeFlags, int pointerId) {
super.onEdgeDragStarted(edgeFlags, pointerId);
if (mLockDrag) {
return;
}
boolean edgeStartLeft = (mDragEdge == DRAG_EDGE_RIGHT)
&& edgeFlags == ViewDragHelper.EDGE_LEFT;
boolean edgeStartRight = (mDragEdge == DRAG_EDGE_LEFT)
&& edgeFlags == ViewDragHelper.EDGE_RIGHT;
boolean edgeStartTop = (mDragEdge == DRAG_EDGE_BOTTOM)
&& edgeFlags == ViewDragHelper.EDGE_TOP;
boolean edgeStartBottom = (mDragEdge == DRAG_EDGE_TOP)
&& edgeFlags == ViewDragHelper.EDGE_BOTTOM;
if (edgeStartLeft || edgeStartRight || edgeStartTop || edgeStartBottom) {
mDragHelper.captureChildView(mMainView, pointerId);
}
}
@Override
public boolean tryCaptureView(@NonNull View child, int pointerId) {
if (!mIsEnable || mEdgeFlag == EDGE_FLAG_NONE) {
return false;
}
boolean dragEnable = mDragHelper.isEdgeTouched(mEdgeFlag, pointerId);
if (dragEnable) {
if (mDragHelper.isEdgeTouched(ViewDragHelper.EDGE_LEFT, pointerId)) {
mCurrentSwipeOrientation = ViewDragHelper.EDGE_LEFT;
} else if (mDragHelper.isEdgeTouched(ViewDragHelper.EDGE_RIGHT, pointerId)) {
mCurrentSwipeOrientation = ViewDragHelper.EDGE_RIGHT;
} else if (mDragHelper.isEdgeTouched(ViewDragHelper.EDGE_TOP, pointerId)) {
mCurrentSwipeOrientation = ViewDragHelper.EDGE_TOP;
} else if (mDragHelper.isEdgeTouched(ViewDragHelper.EDGE_BOTTOM, pointerId)) {
mCurrentSwipeOrientation = ViewDragHelper.EDGE_BOTTOM;
} else {
mCurrentSwipeOrientation = -1;
}
}
if (mOnSwipeChangedListener != null) {
SwipeEdge swipeEdge = null;
if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_LEFT) != 0) {
swipeEdge = SwipeEdge.LEFT;
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_RIGHT) != 0) {
swipeEdge = SwipeEdge.RIGHT;
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_TOP) != 0) {
swipeEdge = SwipeEdge.TOP;
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_BOTTOM) != 0) {
swipeEdge = SwipeEdge.BOTTOM;
}
if (swipeEdge != null) {
mOnSwipeChangedListener.onEdgeTouched(SwipeLayout.this, swipeEdge, mPuppetHost);
}
}
return dragEnable;
}
@Override
public int clampViewPositionVertical(@NonNull View child, int top, int dy) {
int ret = 0;
if (canSwipe(SwipeEdge.TOP) && (mCurrentSwipeOrientation & ViewDragHelper.EDGE_TOP) != 0) {
ret = Math.min(child.getHeight(), Math.max(top, 0));
} else if (canSwipe(SwipeEdge.BOTTOM) && (mCurrentSwipeOrientation & ViewDragHelper.EDGE_BOTTOM) != 0) {
ret = Math.min(0, Math.max(top, -child.getHeight()));
}
return ret;
}
private void drawShadow(@NonNull Canvas canvas, @NonNull View child) {
if (mShadowDrawables == null || mShadowDrawables.length == 0) {
return;
}
final Rect childRect = mTmpRect;
child.getHitRect(childRect);
if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_LEFT) != 0) {
drawShadowChild(canvas, mShadowDrawables[0], childRect.left - mShadowWidth,
childRect.top, childRect.left, childRect.bottom);
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_RIGHT) != 0) {
if (mShadowDrawables.length > 1) {
drawShadowChild(canvas, mShadowDrawables[1], childRect.right,
childRect.top, childRect.right + mShadowWidth, childRect.bottom);
}
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_TOP) != 0) {
if (mShadowDrawables.length > 2) {
drawShadowChild(canvas, mShadowDrawables[2], childRect.left,
childRect.top - mShadowWidth, childRect.right, childRect.top);
}
} else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_BOTTOM) != 0) {
if (mShadowDrawables.length > 3) {
drawShadowChild(canvas, mShadowDrawables[3], childRect.left,
childRect.bottom, childRect.right, childRect.bottom + mShadowWidth);
}
}
}
private void computeScroll(@Nullable View view) {
if (view == null) {
return;
}
view.setX(0);
view.setY(0);
View capturedView = mDragHelper.getCapturedView();
if (capturedView == null) {
return;
}
int xOffset = 0;
int yOffset = 0;
switch (mCurrentSwipeOrientation) {
case ViewDragHelper.EDGE_LEFT:
xOffset = (capturedView.getLeft() - getWidth());
break;
case ViewDragHelper.EDGE_RIGHT:
xOffset = (capturedView.getLeft() + getWidth());
break;
case ViewDragHelper.EDGE_TOP:
yOffset = (capturedView.getTop() - getHeight());
break;
case ViewDragHelper.EDGE_BOTTOM:
yOffset = (capturedView.getTop() + getHeight());
break;
}
if (mParallaxOffset >= 0) {
xOffset *= mScrimOpacity * mParallaxOffset;
yOffset *= mScrimOpacity * mParallaxOffset;
}
view.setX(xOffset);
view.setY(yOffset);
}
@Override
public void onEdgeDragStarted(int edgeFlags, int pointerId) {
View toCapture = null;
if ((edgeFlags & ViewDragHelper.EDGE_BOTTOM) == ViewDragHelper.EDGE_BOTTOM) {
toCapture = findDrawerWithGravity(Gravity.BOTTOM);
}
if (toCapture != null) {
mDragger.captureChildView(toCapture, pointerId);
}
}
public void setSwipeEdgeSide(SwipeEdge[] swipeEdgeSide) {
if (swipeEdgeSide == null || swipeEdgeSide.length == 0) {
mSwipeEdgeSide = new ArrayList<>();
setEnableSwipe(false);
return;
}
mSwipeEdgeSide = Arrays.asList(swipeEdgeSide);
for (SwipeEdge edge : mSwipeEdgeSide) {
if (edge == SwipeEdge.NONE) {
if (swipeEdgeSide.length > 1) {
throw new IllegalArgumentException("The Swiper#edgeSide can not contain other value as" +
" the SwipeEdge.NONE is contained.");
}
setEnableSwipe(false);
return;
} else if (edge == SwipeEdge.ALL) {
if (swipeEdgeSide.length > 1) {
throw new IllegalArgumentException("The Swiper#edgeSide can not contain other value as" +
" the SwipeEdge.ALL is contained.");
}
}
}
setEnableSwipe(true);
if (canSwipe(SwipeEdge.NONE)) {
mEdgeFlag = EDGE_FLAG_NONE;
return;
}
if (canSwipe(SwipeEdge.ALL)) {
mEdgeFlag = ViewDragHelper.EDGE_ALL;
return;
}
mEdgeFlag = EDGE_FLAG_NONE;
if (canSwipe(SwipeEdge.LEFT)) {
if (mEdgeFlag > 0) {
mEdgeFlag |= ViewDragHelper.EDGE_LEFT;
} else {
mEdgeFlag = ViewDragHelper.EDGE_LEFT;
}
}
if (canSwipe(SwipeEdge.RIGHT)) {
if (mEdgeFlag > 0) {
mEdgeFlag |= ViewDragHelper.EDGE_RIGHT;
} else {
mEdgeFlag = ViewDragHelper.EDGE_RIGHT;
}
}
if (canSwipe(SwipeEdge.TOP)) {
if (mEdgeFlag > 0) {
mEdgeFlag |= ViewDragHelper.EDGE_TOP;
} else {
mEdgeFlag = ViewDragHelper.EDGE_TOP;
}
}
if (canSwipe(SwipeEdge.BOTTOM)) {
if (mEdgeFlag > 0) {
mEdgeFlag |= ViewDragHelper.EDGE_BOTTOM;
} else {
mEdgeFlag = ViewDragHelper.EDGE_BOTTOM;
}
}
}