zhpanvip 4 years ago
parent
commit
8c15440ce1

+ 3 - 1
app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java

@@ -125,7 +125,7 @@ public class HomeFragment extends BaseFragment {
                         bannerData.setDrawable(R.drawable.bg_card0);
                         bannerData.setType(TYPE_NEW);
                         bannerData.setTitle("这是一个自定义类型");
-                        dataList.add(1, bannerData);
+//                        dataList.add(1, bannerData);
                         mViewPagerHorizontal.refreshData(dataList);
                         List<ArticleWrapper.Article> articleList = response.getArticleList();
                         ArticleWrapper.Article article = new ArticleWrapper.Article();
@@ -160,6 +160,7 @@ public class HomeFragment extends BaseFragment {
         HomeAdapter homeAdapter = new HomeAdapter();
         mViewPagerHorizontal
                 .setScrollDuration(600)
+                .setOffScreenPageLimit(2)
                 .setLifecycleRegistry(getLifecycle())
                 .setIndicatorStyle(IndicatorStyle.CIRCLE)
                 .setIndicatorSlideMode(IndicatorSlideMode.WORM)
@@ -182,6 +183,7 @@ public class HomeFragment extends BaseFragment {
         mViewPagerVertical
                 .setAutoPlay(true)
                 .setScrollDuration(500)
+
                 .setLifecycleRegistry(getLifecycle())
                 .setIndicatorStyle(IndicatorStyle.ROUND_RECT)
                 .setIndicatorSlideMode(IndicatorSlideMode.SCALE)

+ 1 - 0
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/NetViewHolder.java

@@ -31,5 +31,6 @@ public class NetViewHolder extends BaseViewHolder<BannerData> {
     public void bindData(BannerData data, int position, int pageSize) {
         CornerImageView imageView = findView(R.id.banner_image);
         Glide.with(imageView).load(data.getImagePath()).placeholder(R.drawable.placeholder).into(imageView);
+        BannerUtils.log("NetViewHolder", "position:" + position);
     }
 }

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

@@ -8,7 +8,6 @@ import androidx.annotation.ColorInt;
 import androidx.annotation.Nullable;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.LifecycleRegistry;
 import androidx.lifecycle.OnLifecycleEvent;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.viewpager2.widget.CompositePageTransformer;

+ 56 - 3
bannerview/src/main/java/com/zhpan/bannerview/provider/ScrollDurationManger.java

@@ -1,11 +1,22 @@
 package com.zhpan.bannerview.provider;
 
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.LinearSmoothScroller;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.viewpager2.widget.ViewPager2;
 
+import com.zhpan.bannerview.utils.BannerUtils;
+
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 
 
 /**
@@ -13,11 +24,13 @@ import java.lang.reflect.Field;
  * thanks:https://github.com/zguop/banner/blob/master/pager2banner/src/main/java/com/to/aboomy/pager2banner/Banner.java
  */
 public class ScrollDurationManger extends LinearLayoutManager {
+    private LinearLayoutManager mParent;
     private int scrollDuration;
 
-    public ScrollDurationManger(ViewPager2 viewPager2, int scrollDuration, RecyclerView recyclerView, LinearLayoutManager linearLayoutManager) {
+    public ScrollDurationManger(ViewPager2 viewPager2, int scrollDuration, LinearLayoutManager linearLayoutManager) {
         super(viewPager2.getContext(), linearLayoutManager.getOrientation(), false);
         this.scrollDuration = scrollDuration;
+        mParent = linearLayoutManager;
     }
 
     @Override
@@ -32,12 +45,53 @@ public class ScrollDurationManger extends LinearLayoutManager {
         startSmoothScroll(linearSmoothScroller);
     }
 
+    @Override
+    public boolean performAccessibilityAction(@NonNull RecyclerView.Recycler recycler,
+                                              @NonNull RecyclerView.State state, int action, @Nullable Bundle args) {
+        return mParent.performAccessibilityAction(recycler, state, action, args);
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(@NonNull RecyclerView.Recycler recycler,
+                                                  @NonNull RecyclerView.State state, @NonNull AccessibilityNodeInfoCompat info) {
+        mParent.onInitializeAccessibilityNodeInfo(recycler, state, info);
+    }
+
+    @Override
+    protected void calculateExtraLayoutSpace(@NonNull RecyclerView.State state,
+                                             @NonNull int[] extraLayoutSpace) {
+        try {
+            Method method = mParent.getClass().getDeclaredMethod("calculateExtraLayoutSpace", state.getClass(), extraLayoutSpace.getClass());
+            method.setAccessible(true);
+            method.invoke(mParent, state, extraLayoutSpace);
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();
+            BannerUtils.log(e.getMessage());
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+            BannerUtils.log(e.getMessage());
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();
+            BannerUtils.log(e.getMessage());
+        }
+    }
+
+    @Override
+    public boolean requestChildRectangleOnScreen(@NonNull RecyclerView parent,
+                                                 @NonNull View child, @NonNull Rect rect, boolean immediate,
+                                                 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();
-            ScrollDurationManger speedManger = new ScrollDurationManger(viewPager2, scrollDuration, recyclerView, linearLayoutManager);
+            if (linearLayoutManager == null) {
+                return;
+            }
+            ScrollDurationManger speedManger = new ScrollDurationManger(viewPager2, scrollDuration, linearLayoutManager);
             recyclerView.setLayoutManager(speedManger);
 
             Field mRecyclerView = RecyclerView.LayoutManager.class.getDeclaredField("mRecyclerView");
@@ -72,5 +126,4 @@ public class ScrollDurationManger extends LinearLayoutManager {
             e.printStackTrace();
         }
     }
-
 }