You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/06/15 06:06:24 UTC

[06/12] incubator-weex git commit: + [android] new way to calculate list vertical scroll offset

+ [android] new way to calculate list vertical scroll offset


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/183df14d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/183df14d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/183df14d

Branch: refs/heads/0.14-dev
Commit: 183df14de637052b281f4783316f8e211a77dab3
Parents: cd06f7d
Author: moxun.ljf <fu...@foxmail.com>
Authored: Tue Jun 6 14:10:40 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jun 15 14:00:37 2017 +0800

----------------------------------------------------------------------
 .../main/java/com/taobao/weex/common/Constants.java  |  1 +
 .../weex/ui/component/list/BasicListComponent.java   | 15 ++++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/183df14d/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
index eae7080..f683c99 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
@@ -168,6 +168,7 @@ public class Constants {
     String RETURN_KEY_TYPE = "returnKeyType";
     String OFFSET = "offset";
     String ANIMATED = "animated";
+    String STABLE = "stable";
 
     String INSERT_CELL_ANIMATION = "insertAnimation";
     String DELETE_CELL_ANIMATION = "deleteAnimation";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/183df14d/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index 6127599..aa20902 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -113,6 +113,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
 
   private int mOffsetAccuracy = 10;
   private Point mLastReport = new Point(-1, -1);
+  private boolean mStable = false;
 
   private RecyclerView.ItemAnimator mItemAnimator;
 
@@ -402,6 +403,9 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
       case Constants.Name.DRAGGABLE:
         boolean draggable = WXUtils.getBoolean(param,false);
         setDraggable(draggable);
+      case Constants.Name.STABLE:
+        this.mStable = WXUtils.getBoolean(param, false);
+        return true;
     }
     return super.setProperty(key, param);
   }
@@ -1230,11 +1234,20 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
     if (Constants.Event.SCROLL.equals(type) && getHostView() != null && getHostView().getInnerView() != null) {
       WXRecyclerView innerView = getHostView().getInnerView();
       innerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+        private int totalDy = 0;
+
         @Override
         public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
           super.onScrolled(recyclerView, dx, dy);
           int offsetX = recyclerView.computeHorizontalScrollOffset();
-          int offsetY = recyclerView.computeVerticalScrollOffset();
+          int offsetY = 0;
+          if (mStable) {
+            totalDy -= dy;
+            offsetY = totalDy;
+          } else {
+            offsetY = recyclerView.computeVerticalScrollOffset();
+          }
+
           if (shouldReport(offsetX, offsetY)) {
             int contentWidth = recyclerView.getMeasuredWidth() + recyclerView.computeHorizontalScrollRange();
             int contentHeight = recyclerView.computeVerticalScrollRange();