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

incubator-weex git commit: + [android] add scroll event on horizontal scroller

Repository: incubator-weex
Updated Branches:
  refs/heads/0.15-dev e56f343a9 -> 1b4438829


+ [android] add scroll event on horizontal scroller


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

Branch: refs/heads/0.15-dev
Commit: 1b443882968d5d26f95c7480ac06b3f0dd2097ea
Parents: e56f343
Author: misakuo <mi...@apache.org>
Authored: Wed Jul 5 18:01:14 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Wed Jul 5 18:01:14 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/ui/component/WXScroller.java    | 79 ++++++++++++--------
 .../weex/ui/view/WXHorizontalScrollView.java    | 27 +++++++
 .../com/taobao/weex/ui/view/WXScrollView.java   |  1 -
 3 files changed, 73 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1b443882/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
index 24e4940..627776f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
@@ -148,48 +148,61 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
   @Override
   public void addEvent(String type) {
     super.addEvent(type);
-    if (Constants.Event.SCROLL.equals(type) && getInnerView() != null && getInnerView() instanceof WXScrollView) {
-      ((WXScrollView) getInnerView()).addScrollViewListener(new WXScrollViewListener() {
-        @Override
-        public void onScrollChanged(WXScrollView scrollView, int x, int y, int oldx, int oldy) {
-          if (shouldReport(x, y)) {
-            Rect frame = scrollView.getContentFrame();
+    if (Constants.Event.SCROLL.equals(type) && getInnerView() != null) {
+      if (getInnerView() instanceof WXScrollView) {
+        ((WXScrollView) getInnerView()).addScrollViewListener(new WXScrollViewListener() {
+          @Override
+          public void onScrollChanged(WXScrollView scrollView, int x, int y, int oldx, int oldy) {
+            if (shouldReport(x, y)) {
+              fireScrollEvent(scrollView.getContentFrame(), x, y, oldx, oldy);
+            }
+          }
 
-            Map<String, Object> event = new HashMap<>(2);
-            Map<String, Object> contentSize = new HashMap<>(2);
-            Map<String, Object> contentOffset = new HashMap<>(2);
+          @Override
+          public void onScrollToBottom(WXScrollView scrollView, int x, int y) {
+            //ignore
+          }
 
-            int viewport = getInstance().getInstanceViewPortWidth();
+          @Override
+          public void onScrollStopped(WXScrollView scrollView, int x, int y) {
+            //ignore
+          }
 
-            contentSize.put(Constants.Name.WIDTH, WXViewUtils.getWebPxByWidth(frame.width(), viewport));
-            contentSize.put(Constants.Name.HEIGHT, WXViewUtils.getWebPxByWidth(frame.height(), viewport));
+          @Override
+          public void onScroll(WXScrollView scrollView, int x, int y) {
+            //ignore
+          }
+        });
+      } else if (getInnerView() instanceof WXHorizontalScrollView) {
+        ((WXHorizontalScrollView) getInnerView()).addScrollViewListener(new WXHorizontalScrollView.ScrollViewListener() {
+          @Override
+          public void onScrollChanged(WXHorizontalScrollView scrollView, int x, int y, int oldx, int oldy) {
+            if (shouldReport(x, y)) {
+              fireScrollEvent(scrollView.getContentFrame(), x, y, oldx, oldy);
+            }
+          }
+        });
+      }
+    }
+  }
 
-            contentOffset.put(Constants.Name.X, - WXViewUtils.getWebPxByWidth(x, viewport));
-            contentOffset.put(Constants.Name.Y, - WXViewUtils.getWebPxByWidth(y, viewport));
+  private void fireScrollEvent(Rect contentFrame, int x, int y, int oldx, int oldy) {
+    Map<String, Object> event = new HashMap<>(2);
+    Map<String, Object> contentSize = new HashMap<>(2);
+    Map<String, Object> contentOffset = new HashMap<>(2);
 
-            event.put(Constants.Name.CONTENT_SIZE, contentSize);
-            event.put(Constants.Name.CONTENT_OFFSET, contentOffset);
+    int viewport = getInstance().getInstanceViewPortWidth();
 
-            fireEvent(Constants.Event.SCROLL, event);
-          }
-        }
+    contentSize.put(Constants.Name.WIDTH, WXViewUtils.getWebPxByWidth(contentFrame.width(), viewport));
+    contentSize.put(Constants.Name.HEIGHT, WXViewUtils.getWebPxByWidth(contentFrame.height(), viewport));
 
-        @Override
-        public void onScrollToBottom(WXScrollView scrollView, int x, int y) {
-          //ignore
-        }
+    contentOffset.put(Constants.Name.X, -WXViewUtils.getWebPxByWidth(x, viewport));
+    contentOffset.put(Constants.Name.Y, -WXViewUtils.getWebPxByWidth(y, viewport));
 
-        @Override
-        public void onScrollStopped(WXScrollView scrollView, int x, int y) {
-          //ignore
-        }
+    event.put(Constants.Name.CONTENT_SIZE, contentSize);
+    event.put(Constants.Name.CONTENT_OFFSET, contentOffset);
 
-        @Override
-        public void onScroll(WXScrollView scrollView, int x, int y) {
-          //ignore
-        }
-      });
-    }
+    fireEvent(Constants.Event.SCROLL, event);
   }
 
   private boolean shouldReport(int x, int y) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1b443882/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
index f44a224..d622f91 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
@@ -19,6 +19,7 @@
 package com.taobao.weex.ui.view;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
@@ -28,10 +29,14 @@ import com.taobao.weex.common.WXThread;
 import com.taobao.weex.ui.view.gesture.WXGesture;
 import com.taobao.weex.ui.view.gesture.WXGestureObservable;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class WXHorizontalScrollView extends HorizontalScrollView implements IWXScroller, WXGestureObservable {
 
   private WXGesture wxGesture;
   private ScrollViewListener mScrollViewListener;
+  private List<ScrollViewListener> mScrollViewListeners;
   private boolean scrollable = true;
 
   @Override
@@ -60,6 +65,11 @@ public class WXHorizontalScrollView extends HorizontalScrollView implements IWXS
     if (mScrollViewListener != null) {
       mScrollViewListener.onScrollChanged(this, l, t, oldl, oldt);
     }
+    if (mScrollViewListeners != null) {
+      for (ScrollViewListener listener : mScrollViewListeners) {
+        listener.onScrollChanged(this, l, t, oldl, oldt);
+      }
+    }
   }
 
   public void setScrollViewListener(ScrollViewListener scrollViewListener) {
@@ -71,6 +81,19 @@ public class WXHorizontalScrollView extends HorizontalScrollView implements IWXS
 
   }
 
+  public void addScrollViewListener(ScrollViewListener scrollViewListener) {
+    if (mScrollViewListeners == null) {
+      mScrollViewListeners = new ArrayList<>();
+    }
+    if (!mScrollViewListeners.contains(scrollViewListener)) {
+      mScrollViewListeners.add(scrollViewListener);
+    }
+  }
+
+  public void removeScrollViewListener(ScrollViewListener scrollViewListener) {
+    mScrollViewListeners.remove(scrollViewListener);
+  }
+
   @Override
   public void registerGestureListener(WXGesture wxGesture) {
     this.wxGesture = wxGesture;
@@ -100,4 +123,8 @@ public class WXHorizontalScrollView extends HorizontalScrollView implements IWXS
   public void setScrollable(boolean scrollable) {
     this.scrollable = scrollable;
   }
+
+  public Rect getContentFrame() {
+    return new Rect(0, 0, computeHorizontalScrollRange(), computeVerticalScrollRange());
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1b443882/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
index b6e9914..699336c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
@@ -42,7 +42,6 @@ import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXReflectionUtils;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;