Android: fix inaccurate scroll when slider in gallery style
This commit is contained in:
		| @@ -60,6 +60,8 @@ public class SliderNode extends SuperNode<RecyclerView> { | |||||||
|     private int slidePosition; |     private int slidePosition; | ||||||
|     private boolean needSlideToPosition; |     private boolean needSlideToPosition; | ||||||
|  |  | ||||||
|  |     private PagerSnapHelper snapHelper; | ||||||
|  |  | ||||||
|     public SliderNode(DoricContext doricContext) { |     public SliderNode(DoricContext doricContext) { | ||||||
|         super(doricContext); |         super(doricContext); | ||||||
|         this.slideAdapter = new SlideAdapter(this); |         this.slideAdapter = new SlideAdapter(this); | ||||||
| @@ -69,7 +71,6 @@ public class SliderNode extends SuperNode<RecyclerView> { | |||||||
|     protected RecyclerView build() { |     protected RecyclerView build() { | ||||||
|         final RecyclerView recyclerView = new RecyclerView(getContext()); |         final RecyclerView recyclerView = new RecyclerView(getContext()); | ||||||
|  |  | ||||||
|  |  | ||||||
|         final SliderLayoutManager layoutManager = new SliderLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false) { |         final SliderLayoutManager layoutManager = new SliderLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false) { | ||||||
|             @Override |             @Override | ||||||
|             public boolean canScrollHorizontally() { |             public boolean canScrollHorizontally() { | ||||||
| @@ -92,7 +93,7 @@ public class SliderNode extends SuperNode<RecyclerView> { | |||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         recyclerView.setLayoutManager(layoutManager); |         recyclerView.setLayoutManager(layoutManager); | ||||||
|         final PagerSnapHelper snapHelper = new PagerSnapHelper(); |         snapHelper = new PagerSnapHelper(); | ||||||
|         snapHelper.attachToRecyclerView(recyclerView); |         snapHelper.attachToRecyclerView(recyclerView); | ||||||
|  |  | ||||||
|         recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { |         recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { | ||||||
| @@ -332,6 +333,20 @@ public class SliderNode extends SuperNode<RecyclerView> { | |||||||
|             } else { |             } else { | ||||||
|                 mView.scrollToPosition(page); |                 mView.scrollToPosition(page); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             if (slideStyle.equals("gallery")) { | ||||||
|  |                 mView.post(new Runnable() { | ||||||
|  |                     @Override | ||||||
|  |                     public void run() { | ||||||
|  |                         View snapView = snapHelper.findSnapView(mView.getLayoutManager()); | ||||||
|  |                         if (snapView != null) { | ||||||
|  |                             int[] distance = snapHelper.calculateDistanceToFinalSnap(mView.getLayoutManager(), snapView); | ||||||
|  |                             mView.smoothScrollBy(distance[0], distance[1]); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |  | ||||||
|         } |         } | ||||||
|         if (!TextUtils.isEmpty(onPageSlidedFuncId)) { |         if (!TextUtils.isEmpty(onPageSlidedFuncId)) { | ||||||
|             callJSResponse(onPageSlidedFuncId, page); |             callJSResponse(onPageSlidedFuncId, page); | ||||||
|   | |||||||
| @@ -33,5 +33,9 @@ class SliderStyleDemo extends Panel { | |||||||
|                 heightSpec: LayoutSpec.MOST, |                 heightSpec: LayoutSpec.MOST, | ||||||
|             } |             } | ||||||
|         })) |         })) | ||||||
|  |  | ||||||
|  |         setTimeout(() => { | ||||||
|  |             pager.slidePage(this.context, 2, false); | ||||||
|  |         }, 200) | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user