Repository: incubator-weex Updated Branches: refs/heads/0.15-dev da562689a -> 831cb26d3
* [android] fix illegal value in scroll event for list Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/831cb26d Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/831cb26d Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/831cb26d Branch: refs/heads/0.15-dev Commit: 831cb26d33e3faa2047192e36fff9d67631569d2 Parents: da56268 Author: misakuo <misa...@apache.org> Authored: Thu Jul 20 15:26:03 2017 +0800 Committer: misakuo <misa...@apache.org> Committed: Thu Jul 20 15:26:03 2017 +0800 ---------------------------------------------------------------------- .../ui/component/list/BasicListComponent.java | 66 +++++++++----------- .../taobao/weex/ui/component/list/WXCell.java | 10 --- 2 files changed, 30 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/831cb26d/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 f3f6ac6..cdff266 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,7 +113,6 @@ 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; @@ -133,16 +132,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView private static final boolean DEFAULT_EXCLUDED = false; private static final String DRAG_ANCHOR = "dragAnchor"; - private float mContentHeight = 0; - - public void recalculateSize() { - float height = 0; - for(int i=0, c = getChildCount(); i<=c-1 ; i++){ - height += getChild(i).getLayoutHeight(); - } - mContentHeight = height; - fireScrollEvent(0,0); - } /** * gesture type which can trigger drag&drop @@ -191,12 +180,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView mTriggerType = getTriggerType(getDomObject()); } - @Override - protected void onFinishLayout() { - super.onFinishLayout(); - recalculateSize(); - } - /** * Measure the size of the recyclerView. * @@ -420,9 +403,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView int accuracy = WXUtils.getInteger(param, 10); setOffsetAccuracy(accuracy); return true; - case Constants.Name.STABLE: - this.mStable = WXUtils.getBoolean(param, false); - return true; case Constants.Name.DRAGGABLE: boolean draggable = WXUtils.getBoolean(param,false); setDraggable(draggable); @@ -1255,36 +1235,47 @@ 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; + private int offsetXCorrection, offsetYCorrection; + private boolean mFirstEvent = true; @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); +// WXLogUtils.e("SCROLL", dx + ", " + dy + ", " + recyclerView.computeHorizontalScrollRange() +// + ", " + recyclerView.computeVerticalScrollRange() +// + ", " + recyclerView.computeHorizontalScrollOffset() +// + ", " + recyclerView.computeVerticalScrollOffset()); + int offsetX = recyclerView.computeHorizontalScrollOffset(); - int offsetY = 0; - if (mStable) { - totalDy -= dy; - offsetY = totalDy; + int offsetY = recyclerView.computeVerticalScrollOffset(); + + if (dx == 0 && dy == 0) { + offsetXCorrection = offsetX; + offsetYCorrection = offsetY; + offsetX = 0; + offsetY = 0; } else { - offsetY = recyclerView.computeVerticalScrollOffset(); + offsetX = offsetX - offsetXCorrection; + offsetY = offsetY - offsetYCorrection; + } + + if (mFirstEvent) { + //skip first event + mFirstEvent = false; + return; } if (shouldReport(offsetX, offsetY)) { - fireScrollEvent(offsetX, offsetY); + fireScrollEvent(recyclerView, offsetX, offsetY); } } }); } } - private void fireScrollEvent(int offsetX, int offsetY){ - ListComponentView view = getHostView(); - if(view == null){ - return; - } - WXRecyclerView innerView = view.getInnerView(); - int contentWidth = innerView.getMeasuredWidth() + innerView.computeHorizontalScrollRange(); - int contentHeight = (int)mContentHeight; + private void fireScrollEvent(RecyclerView recyclerView, int offsetX, int offsetY) { + int contentWidth = recyclerView.getMeasuredWidth() + recyclerView.computeHorizontalScrollRange(); + int contentHeight = recyclerView.computeVerticalScrollRange(); Map<String, Object> event = new HashMap<>(2); Map<String, Object> contentSize = new HashMap<>(2); @@ -1308,7 +1299,10 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView return true; } - if (Math.abs(mLastReport.x - offsetX) >= mOffsetAccuracy || Math.abs(mLastReport.y - offsetY) >= mOffsetAccuracy) { + int gapX = Math.abs(mLastReport.x - offsetX); + int gapY = Math.abs(mLastReport.y - offsetY); + + if (gapX >= mOffsetAccuracy || gapY >= mOffsetAccuracy) { mLastReport.x = offsetX; mLastReport.y = offsetY; return true; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/831cb26d/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java index 172f19b..9a5e468 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java @@ -27,7 +27,6 @@ import android.widget.FrameLayout; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.annotation.Component; import com.taobao.weex.dom.WXDomObject; -import com.taobao.weex.dom.flex.CSSLayout; import com.taobao.weex.ui.component.WXVContainer; import com.taobao.weex.ui.view.WXFrameLayout; @@ -83,15 +82,6 @@ public class WXCell extends WXVContainer<WXFrameLayout> { } } - @Override - protected void onFinishLayout() { - super.onFinishLayout(); - WXVContainer container = getParent(); - if(container != null && container instanceof BasicListComponent){ - ((BasicListComponent)container).recalculateSize(); - } - } - public int getLocationFromStart(){ return mLastLocationY; }