Răsfoiți Sursa

stopLoopWhenDetachedFromWindow supported for issue #207

zhpanvip 3 ani în urmă
părinte
comite
6703c4a374

+ 1 - 0
app/src/main/java/com/example/zhpan/banner/fragment/HomeFragment.java

@@ -189,6 +189,7 @@ public class HomeFragment extends BaseFragment {
         mViewPagerVertical
             .setAutoPlay(true)
             .setScrollDuration(500)
+            .stopLoopWhenDetachedFromWindow(false)
             .setLifecycleRegistry(getLifecycle())
             .setIndicatorStyle(IndicatorStyle.ROUND_RECT)
             .setIndicatorSlideMode(IndicatorSlideMode.SCALE)

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

@@ -137,14 +137,20 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
 
   @Override
   protected void onDetachedFromWindow() {
-    stopLoop();
+    if (mBannerManager != null && mBannerManager.getBannerOptions()
+        .isStopLoopWhenDetachedFromWindow()) {
+      stopLoop();
+    }
     super.onDetachedFromWindow();
   }
 
   @Override
   protected void onAttachedToWindow() {
     super.onAttachedToWindow();
-    startLoop();
+    if (mBannerManager != null && mBannerManager.getBannerOptions()
+        .isStopLoopWhenDetachedFromWindow()) {
+      startLoop();
+    }
   }
 
   @Override
@@ -1087,6 +1093,17 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
     return this;
   }
 
+  /**
+   * @param stopLoopWhenDetachedFromWindow 当BVP滑动出屏幕的时候是否要停止轮播,
+   *
+   * true:滑动出屏幕停止自动轮播,false:滑动出屏幕继续自动轮播。默认值为true
+   */
+  public BannerViewPager<T> stopLoopWhenDetachedFromWindow(boolean stopLoopWhenDetachedFromWindow) {
+    mBannerManager.getBannerOptions()
+        .setStopLoopWhenDetachedFromWindow(stopLoopWhenDetachedFromWindow);
+    return this;
+  }
+
   /**
    * @deprecated Use {@link BannerViewPager#disallowParentInterceptDownEvent(boolean)} instead.
    */

+ 10 - 0
bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java

@@ -70,6 +70,8 @@ public class BannerOptions {
 
   private boolean disallowParentInterceptDownEvent;
 
+  private boolean stopLoopWhenDetachedFromWindow = true;
+
   private final IndicatorOptions mIndicatorOptions;
 
   public int getInterval() {
@@ -296,6 +298,14 @@ public class BannerOptions {
         rtl ? IndicatorOrientation.INDICATOR_RTL : IndicatorOrientation.INDICATOR_HORIZONTAL);
   }
 
+  public boolean isStopLoopWhenDetachedFromWindow() {
+    return stopLoopWhenDetachedFromWindow;
+  }
+
+  public void setStopLoopWhenDetachedFromWindow(boolean stopLoopWhenDetachedFromWindow) {
+    this.stopLoopWhenDetachedFromWindow = stopLoopWhenDetachedFromWindow;
+  }
+
   public static class IndicatorMargin {
 
     private final int left, right, top, bottom;