Browse Source

Modify ScrollDurationManger.java

zhpanvip 4 năm trước cách đây
mục cha
commit
1d2da7a5da

+ 2 - 1
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -25,6 +25,7 @@ import com.zhpan.bannerview.annotation.Visibility;
 import com.zhpan.bannerview.constants.PageStyle;
 import com.zhpan.bannerview.manager.BannerManager;
 import com.zhpan.bannerview.manager.BannerOptions;
+import com.zhpan.bannerview.provider.ReflectLayoutManager;
 import com.zhpan.bannerview.provider.ScrollDurationManger;
 import com.zhpan.bannerview.provider.ViewStyleSetter;
 import com.zhpan.bannerview.utils.BannerUtils;
@@ -355,7 +356,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
         }
         BannerOptions bannerOptions = mBannerManager.getBannerOptions();
         if (bannerOptions.getScrollDuration() != 0) {
-            ScrollDurationManger.reflectLayoutManager(mViewPager, bannerOptions.getScrollDuration());
+            ReflectLayoutManager.reflectLayoutManager(mViewPager, bannerOptions.getScrollDuration());
         }
         currentPosition = 0;
         mBannerPagerAdapter.setCanLoop(bannerOptions.isCanLoop());

+ 57 - 0
bannerview/src/main/java/com/zhpan/bannerview/provider/ReflectLayoutManager.java

@@ -0,0 +1,57 @@
+package com.zhpan.bannerview.provider;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewpager2.widget.ViewPager2;
+
+import java.lang.reflect.Field;
+
+/**
+ * @author zhangpan
+ * @date 2020/12/21
+ */
+public class ReflectLayoutManager {
+
+    public static void reflectLayoutManager(ViewPager2 viewPager2, int scrollDuration) {
+        try {
+            RecyclerView recyclerView = (RecyclerView) viewPager2.getChildAt(0);
+            recyclerView.setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
+            LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
+            if (linearLayoutManager == null) {
+                return;
+            }
+            ScrollDurationManger scrollDurationManger = new ScrollDurationManger(viewPager2, scrollDuration, linearLayoutManager);
+            recyclerView.setLayoutManager(scrollDurationManger);
+
+            Field mRecyclerField = RecyclerView.LayoutManager.class.getDeclaredField("mRecyclerView");
+            mRecyclerField.setAccessible(true);
+            mRecyclerField.set(linearLayoutManager, recyclerView);
+            Field layoutMangerField = ViewPager2.class.getDeclaredField("mLayoutManager");
+            layoutMangerField.setAccessible(true);
+            layoutMangerField.set(viewPager2, scrollDurationManger);
+
+            Field pageTransformerAdapterField = ViewPager2.class.getDeclaredField("mPageTransformerAdapter");
+            pageTransformerAdapterField.setAccessible(true);
+            Object mPageTransformerAdapter = pageTransformerAdapterField.get(viewPager2);
+            if (mPageTransformerAdapter != null) {
+                Class<?> aClass = mPageTransformerAdapter.getClass();
+                Field layoutManager = aClass.getDeclaredField("mLayoutManager");
+                layoutManager.setAccessible(true);
+                layoutManager.set(mPageTransformerAdapter, scrollDurationManger);
+            }
+            Field scrollEventAdapterField = ViewPager2.class.getDeclaredField("mScrollEventAdapter");
+            scrollEventAdapterField.setAccessible(true);
+            Object mScrollEventAdapter = scrollEventAdapterField.get(viewPager2);
+            if (mScrollEventAdapter != null) {
+                Class<?> aClass = mScrollEventAdapter.getClass();
+                Field layoutManager = aClass.getDeclaredField("mLayoutManager");
+                layoutManager.setAccessible(true);
+                layoutManager.set(mScrollEventAdapter, scrollDurationManger);
+            }
+        } catch (NoSuchFieldException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 1 - 45
bannerview/src/main/java/com/zhpan/bannerview/provider/ScrollDurationManger.java

@@ -20,7 +20,7 @@ import java.lang.reflect.Method;
 
 
 /**
- * thanks:https://github.com/zguop/banner/blob/master/pager2banner/src/main/java/com/to/aboomy/pager2banner/Banner.java
+ * Thanks:https://github.com/zguop/banner/blob/master/pager2banner/src/main/java/com/to/aboomy/pager2banner/Banner.java
  */
 public class ScrollDurationManger extends LinearLayoutManager {
     private final LinearLayoutManager mParent;
@@ -81,48 +81,4 @@ public class ScrollDurationManger extends LinearLayoutManager {
                                                  boolean focusedChildVisible) {
         return false; // users should use setCurrentItem instead
     }
-
-    public static void reflectLayoutManager(ViewPager2 viewPager2, int scrollDuration) {
-        try {
-            RecyclerView recyclerView = (RecyclerView) viewPager2.getChildAt(0);
-            recyclerView.setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
-            LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
-            if (linearLayoutManager == null) {
-                return;
-            }
-            ScrollDurationManger speedManger = new ScrollDurationManger(viewPager2, scrollDuration, linearLayoutManager);
-            recyclerView.setLayoutManager(speedManger);
-
-            Field mRecyclerView = RecyclerView.LayoutManager.class.getDeclaredField("mRecyclerView");
-            mRecyclerView.setAccessible(true);
-            mRecyclerView.set(linearLayoutManager, recyclerView);
-
-            Field layoutMangerField = ViewPager2.class.getDeclaredField("mLayoutManager");
-            layoutMangerField.setAccessible(true);
-            layoutMangerField.set(viewPager2, speedManger);
-
-            Field pageTransformerAdapterField = ViewPager2.class.getDeclaredField("mPageTransformerAdapter");
-            pageTransformerAdapterField.setAccessible(true);
-            Object mPageTransformerAdapter = pageTransformerAdapterField.get(viewPager2);
-            if (mPageTransformerAdapter != null) {
-                Class<?> aClass = mPageTransformerAdapter.getClass();
-                Field layoutManager = aClass.getDeclaredField("mLayoutManager");
-                layoutManager.setAccessible(true);
-                layoutManager.set(mPageTransformerAdapter, speedManger);
-            }
-            Field scrollEventAdapterField = ViewPager2.class.getDeclaredField("mScrollEventAdapter");
-            scrollEventAdapterField.setAccessible(true);
-            Object mScrollEventAdapter = scrollEventAdapterField.get(viewPager2);
-            if (mScrollEventAdapter != null) {
-                Class<?> aClass = mScrollEventAdapter.getClass();
-                Field layoutManager = aClass.getDeclaredField("mLayoutManager");
-                layoutManager.setAccessible(true);
-                layoutManager.set(mScrollEventAdapter, speedManger);
-            }
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        }
-    }
 }