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;