Repository: incubator-weex Updated Branches: refs/heads/master 6b3519a2d -> 00a4cd654
nest scroll Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/868a9bd6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/868a9bd6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/868a9bd6 Branch: refs/heads/master Commit: 868a9bd64c35cf86ea29a6f4bbfe70e06dccfa8c Parents: 1538690 Author: jianbai.gbj <jianbai....@alibaba-inc.com> Authored: Thu Oct 26 14:04:04 2017 +0800 Committer: jianbai.gbj <jianbai....@alibaba-inc.com> Committed: Thu Oct 26 14:04:04 2017 +0800 ---------------------------------------------------------------------- .../ui/view/refresh/core/WXSwipeLayout.java | 92 ++++++++++++++++---- 1 file changed, 77 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/868a9bd6/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java index fa26de7..e9c84e4 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java @@ -24,6 +24,8 @@ import android.annotation.TargetApi; import android.content.Context; import android.graphics.Color; import android.os.Build; +import android.support.v4.view.NestedScrollingChild; +import android.support.v4.view.NestedScrollingChildHelper; import android.support.v4.view.NestedScrollingParent; import android.support.v4.view.NestedScrollingParentHelper; import android.support.v4.view.ViewCompat; @@ -36,9 +38,11 @@ import android.view.View; import android.widget.AbsListView; import android.widget.FrameLayout; -public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent { +public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent, NestedScrollingChild { - private NestedScrollingParentHelper parentHelper; + private NestedScrollingParentHelper mNestedScrollingParentHelper; + private NestedScrollingChildHelper mNestedScrollingChildHelper; + private final int[] mParentOffsetInWindow = new int[2]; private WXOnRefreshListener onRefreshListener; private WXOnLoadingListener onLoadingListener; @@ -143,7 +147,9 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent throw new RuntimeException("WXSwipeLayout should not have more than one child"); } - parentHelper = new NestedScrollingParentHelper(this); + mNestedScrollingParentHelper = new NestedScrollingParentHelper(this); + mNestedScrollingChildHelper = new NestedScrollingChildHelper(this); + setNestedScrollingEnabled(true); if (isInEditMode() && attrs == null) { return; @@ -206,6 +212,68 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent return super.onInterceptTouchEvent(ev); } + // NestedScrollingChild + + @Override + public void setNestedScrollingEnabled(boolean enabled) { + mNestedScrollingChildHelper.setNestedScrollingEnabled(enabled); + } + + @Override + public boolean isNestedScrollingEnabled() { + return mNestedScrollingChildHelper.isNestedScrollingEnabled(); + } + + @Override + public boolean startNestedScroll(int axes) { + return mNestedScrollingChildHelper.startNestedScroll(axes); + } + + @Override + public void stopNestedScroll() { + mNestedScrollingChildHelper.stopNestedScroll(); + } + + @Override + public boolean hasNestedScrollingParent() { + return mNestedScrollingChildHelper.hasNestedScrollingParent(); + } + + @Override + public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, + int dyUnconsumed, int[] offsetInWindow) { + return mNestedScrollingChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, + dxUnconsumed, dyUnconsumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { + return mNestedScrollingChildHelper.dispatchNestedPreScroll( + dx, dy, consumed, offsetInWindow); + } + + @Override + public boolean onNestedPreFling(View target, float velocityX, + float velocityY) { + return dispatchNestedPreFling(velocityX, velocityY); + } + + @Override + public boolean onNestedFling(View target, float velocityX, float velocityY, + boolean consumed) { + return dispatchNestedFling(velocityX, velocityY, consumed); + } + + @Override + public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { + return mNestedScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed); + } + + @Override + public boolean dispatchNestedPreFling(float velocityX, float velocityY) { + return mNestedScrollingChildHelper.dispatchNestedPreFling(velocityX, velocityY); + } + /*********************************** NestedScrollParent *************************************/ @Override @@ -215,7 +283,8 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent @Override public void onNestedScrollAccepted(View child, View target, int axes) { - parentHelper.onNestedScrollAccepted(child, target, axes); + mNestedScrollingParentHelper.onNestedScrollAccepted(child, target, axes); + startNestedScroll(axes); } /** @@ -225,8 +294,9 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent */ @Override public void onStopNestedScroll(View child) { - parentHelper.onStopNestedScroll(child); + mNestedScrollingParentHelper.onStopNestedScroll(child); handlerAction(); + stopNestedScroll(); } /** @@ -261,23 +331,15 @@ public class WXSwipeLayout extends FrameLayout implements NestedScrollingParent @Override public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { - + dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, mParentOffsetInWindow); } @Override public int getNestedScrollAxes() { - return parentHelper.getNestedScrollAxes(); + return mNestedScrollingParentHelper.getNestedScrollAxes(); } - @Override - public boolean onNestedPreFling(View target, float velocityX, float velocityY) { - return false; - } - @Override - public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { - return false; - } private double calculateDistanceY(View target, int dy) { int viewHeight = target.getMeasuredHeight();