Browse Source

2.4.2 (#21)

* Add MULTI_PAGE style.
zhpanvip 5 years ago
parent
commit
9b8d5dba8f
64 changed files with 123 additions and 91 deletions
  1. 44 22
      README.md
  2. BIN
      apk/app.apk
  3. BIN
      apk/key
  4. 0 3
      app/src/main/java/com/example/zhpan/circleviewpager/App.java
  5. 8 5
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java
  6. BIN
      app/src/main/res/drawable-hdpi/c0.jpg
  7. BIN
      app/src/main/res/drawable-hdpi/c1.jpg
  8. BIN
      app/src/main/res/drawable-hdpi/c2.jpg
  9. BIN
      app/src/main/res/drawable-hdpi/c3.jpg
  10. BIN
      app/src/main/res/drawable-hdpi/c4.jpg
  11. BIN
      app/src/main/res/drawable-hdpi/placeholder.jpg
  12. BIN
      app/src/main/res/drawable-hdpi/t0.jpg
  13. BIN
      app/src/main/res/drawable-hdpi/t1.jpg
  14. BIN
      app/src/main/res/drawable-hdpi/t2.jpg
  15. BIN
      app/src/main/res/drawable-hdpi/t3.jpg
  16. BIN
      app/src/main/res/drawable-xhdpi/c0.jpg
  17. BIN
      app/src/main/res/drawable-xhdpi/c1.jpg
  18. BIN
      app/src/main/res/drawable-xhdpi/c2.jpg
  19. BIN
      app/src/main/res/drawable-xhdpi/c3.jpg
  20. BIN
      app/src/main/res/drawable-xhdpi/c4.jpg
  21. BIN
      app/src/main/res/drawable-xhdpi/placeholder.jpg
  22. BIN
      app/src/main/res/drawable-xhdpi/t0.jpg
  23. BIN
      app/src/main/res/drawable-xhdpi/t1.jpg
  24. BIN
      app/src/main/res/drawable-xhdpi/t2.jpg
  25. BIN
      app/src/main/res/drawable-xhdpi/t3.jpg
  26. BIN
      app/src/main/res/drawable-xxhdpi/c0.jpg
  27. BIN
      app/src/main/res/drawable-xxhdpi/c1.jpg
  28. BIN
      app/src/main/res/drawable-xxhdpi/c2.jpg
  29. BIN
      app/src/main/res/drawable-xxhdpi/c3.jpg
  30. BIN
      app/src/main/res/drawable-xxhdpi/c4.jpg
  31. BIN
      app/src/main/res/drawable-xxhdpi/guide0.jpg
  32. BIN
      app/src/main/res/drawable-xxhdpi/guide1.jpg
  33. BIN
      app/src/main/res/drawable-xxhdpi/guide2.jpg
  34. BIN
      app/src/main/res/drawable-xxhdpi/placeholder.jpg
  35. BIN
      app/src/main/res/drawable-xxhdpi/t0.jpg
  36. BIN
      app/src/main/res/drawable-xxhdpi/t1.jpg
  37. BIN
      app/src/main/res/drawable-xxhdpi/t2.jpg
  38. BIN
      app/src/main/res/drawable-xxhdpi/t3.jpg
  39. BIN
      app/src/main/res/drawable-xxxhdpi/c0.jpg
  40. BIN
      app/src/main/res/drawable-xxxhdpi/c1.jpg
  41. BIN
      app/src/main/res/drawable-xxxhdpi/c2.jpg
  42. BIN
      app/src/main/res/drawable-xxxhdpi/c3.jpg
  43. BIN
      app/src/main/res/drawable-xxxhdpi/c4.jpg
  44. BIN
      app/src/main/res/drawable-xxxhdpi/guide0.jpg
  45. BIN
      app/src/main/res/drawable-xxxhdpi/guide1.jpg
  46. BIN
      app/src/main/res/drawable-xxxhdpi/guide2.jpg
  47. BIN
      app/src/main/res/drawable-xxxhdpi/placeholder.jpg
  48. BIN
      app/src/main/res/drawable-xxxhdpi/t0.jpg
  49. BIN
      app/src/main/res/drawable-xxxhdpi/t1.jpg
  50. BIN
      app/src/main/res/drawable-xxxhdpi/t2.jpg
  51. BIN
      app/src/main/res/drawable-xxxhdpi/t3.jpg
  52. BIN
      app/src/main/res/drawable/placeholder.jpg
  53. 11 6
      app/src/main/res/layout/activity_page_style.xml
  54. 1 2
      app/src/main/res/layout/item_custom_view.xml
  55. 1 2
      app/src/main/res/layout/item_view.xml
  56. 15 39
      bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
  57. 4 4
      bannerview/src/main/java/com/zhpan/bannerview/adapter/BannerPagerAdapter.java
  58. 3 2
      bannerview/src/main/java/com/zhpan/bannerview/annotation/APageStyle.java
  59. 8 1
      bannerview/src/main/java/com/zhpan/bannerview/constants/PageStyle.java
  60. 1 1
      bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/ScaleInTransformer.java
  61. 27 4
      bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java
  62. BIN
      image/page_style_multi.gif
  63. BIN
      image/page_style_multi_scale.gif
  64. BIN
      image/qrcode.png

+ 44 - 22
README.md

@@ -1,22 +1,26 @@
+# BannerViewPager
 
+[![License](https://img.shields.io/badge/License%20-Apache%202-337ab7.svg)](https://www.apache.org/licenses/LICENSE-2.0)
+[![MinSdk](https://img.shields.io/badge/API-19%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=19)
+[![JitPack](https://jitpack.io/v/zhpanvip/BannerViewPager.svg)](https://jitpack.io/#zhpanvip/BannerViewPager)
+[ ![JCenter](https://api.bintray.com/packages/zhpanvip/CircleViewPager/bannerview/images/download.svg) ](https://bintray.com/zhpanvip/CircleViewPager/bannerview/_latestVersion)
 
-# 效果预览
+## 效果预览
 
-## 1.基础功能
+ ### [扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/raw/master/apk/app.apk)
+
+![扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/image/qrcode.png)
 
-| 嵌套RecyclerView | 自定义页面 | 嵌套PhotoView   |
-|--|--|--|
-| ![嵌套RecyclerView](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview1.gif) | ![自定义页面](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview2.gif) | ![嵌套PhotoView](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview3.gif)   |
 
-## 2.setPageStyle--支持一屏多页
+### 1.setPageStyle--支持一屏多页
 
 [一屏多页Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java)
 
-| MULTI_PAGE | MULTI_PAGE_OVERLAY |
-|--|--|
-| ![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_overlay.gif) |
+| MULTI_PAGE |MULTI_PAGE_SCALE | MULTI_PAGE_OVERLAP |
+|--|--|--|
+| ![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_scale.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_overlay.gif) |
 
-## 3.setIndicatorViewStyle
+### 2.setIndicatorViewStyle
 BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。
 
 [IndicatorViewStyle Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java)
@@ -25,14 +29,14 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 |--|--|--|
 | ![CIRCLE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_circle.gif) | ![DASH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_dash.gif) | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custum.gif) |
 
-## 4.setIndicatorSlideMode
+### 3.setIndicatorSlideMode
 
 | NORMAL | SMOOTH |
 |--|--|
 | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/slide_normal.gif) |  ![SMOOTH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/slide_smooth.gif) |
 
 
-## 5.setPageTransformerStyle
+### 4.setPageTransformerStyle
 
 [TransformStyle Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java)
 
@@ -42,7 +46,7 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 
 
 
-# 开放API
+## 开放API
 
 | 方法名 | 方法描述 | 说明 |
 |--|--|--|
@@ -79,9 +83,9 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 
 
 
-# 如何使用
+## 如何使用
 
-## 1.gradle中添加依赖
+### 1.gradle中添加依赖
    
 
 如果您已迁移到AndroidX,请在项目的root build.gradle中添加如下配置:
@@ -110,7 +114,7 @@ implementation 'com.zhpan.library:bannerview:latestVersion'
 
 非Androidx latestVersion: [ ![latestVersion](https://api.bintray.com/packages/zhpanvip/CircleViewPager/bannerview/images/download.svg) ](https://bintray.com/zhpanvip/CircleViewPager/bannerview/_latestVersion)
 
-## 2.在xml文件中添加如下代码:
+### 2.在xml文件中添加如下代码:
 
 ```
     <com.zhpan.bannerview.BannerViewPager
@@ -120,7 +124,7 @@ implementation 'com.zhpan.library:bannerview:latestVersion'
             android:layout_height="160dp" />
 ```
 
-## 3.Banner的页面布局
+### 3.Banner的页面布局
 
 ```
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -156,7 +160,7 @@ implementation 'com.zhpan.library:bannerview:latestVersion'
 </RelativeLayout>
 ```
 
-## 4.自定义ViewHolder
+### 4.自定义ViewHolder
 
 ```
 public class NetViewHolder implements ViewHolder<BannerData> {
@@ -180,7 +184,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
 }
 ```
 
-## 5.BannerViewPager参数配置
+### 5.BannerViewPager参数配置
 
 ```
     private BannerViewPager<BannerData, NetViewHolder> mBannerViewPager;
@@ -204,7 +208,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
         }
 ```
 
-## 6.开启与停止轮播
+### 6.开启与停止轮播
 
 如果开启了自动轮播功能,请务必在onDestroy中停止轮播,以免出现内存泄漏。
 
@@ -233,7 +237,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
             mBannerViewPager.startLoop();
     }
 ```
-## 7.高级功能---自定义IndicatorView
+### 7.高级功能---自定义IndicatorView
 
 **(1)自定义View并继承BaseIndicatorView**
 
@@ -300,7 +304,7 @@ public class FigureIndicatorView extends BaseIndicatorView {
 }
 ```
 
-# TODO 版本计划
+## TODO 版本计划
 
  - [x] 优化及重构IndicatorView(2.0.1)
 
@@ -332,6 +336,24 @@ public class FigureIndicatorView extends BaseIndicatorView {
 [玩Android](https://wanandroid.com/)
 
 
+License
+-------
+
+    Copyright 2019 zhpanvip
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
 
 
 

BIN
apk/app.apk


BIN
apk/key


+ 0 - 3
app/src/main/java/com/example/zhpan/circleviewpager/App.java

@@ -6,9 +6,6 @@ import com.example.zhpan.circleviewpager.imageloader.GlideImageLoader;
 import com.example.zhpan.circleviewpager.imageloader.ImageLoaderManager;
 import com.zhpan.idea.utils.Utils;
 
-import leakcanary.AppWatcher;
-import leakcanary.LeakCanary;
-
 /**
  * <pre>
  *   Created by zhangpan on 2019-08-14.

+ 8 - 5
app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java

@@ -26,8 +26,8 @@ public class PageStyleActivity extends BaseDataActivity {
 
     private void setupBanner(@APageStyle int pageStyle) {
         mViewPager
-                .setPageMargin(DpUtils.dp2px(20))
-                .setRevealWidth(DpUtils.dp2px(20))
+                .setPageMargin(DpUtils.dp2px(10))
+                .setRevealWidth(DpUtils.dp2px(10))
                 .setInterval(3000)
                 .setPageStyle(pageStyle)
                 .setHolderCreator(() -> new ImageResourceViewHolder(DpUtils.dp2px(5)))
@@ -43,12 +43,15 @@ public class PageStyleActivity extends BaseDataActivity {
                 case R.id.rb_multi_page:
                     setupBanner(PageStyle.MULTI_PAGE);
                     break;
-                case R.id.rb_multi_page_overlay:
-                    setupBanner(PageStyle.MULTI_PAGE_OVERLAY);
+                case R.id.rb_multi_page_scale:
+                    setupBanner(PageStyle.MULTI_PAGE_SCALE);
+                    break;
+                case R.id.rb_multi_page_overlap:
+                    setupBanner(PageStyle.MULTI_PAGE_OVERLAP);
                     break;
             }
         });
-        RadioButton radioButton = findViewById(R.id.rb_multi_page_overlay);
+        RadioButton radioButton = findViewById(R.id.rb_multi_page);
         radioButton.performClick();
     }
 

BIN
app/src/main/res/drawable-hdpi/c0.jpg


BIN
app/src/main/res/drawable-hdpi/c1.jpg


BIN
app/src/main/res/drawable-hdpi/c2.jpg


BIN
app/src/main/res/drawable-hdpi/c3.jpg


BIN
app/src/main/res/drawable-hdpi/c4.jpg


BIN
app/src/main/res/drawable-hdpi/placeholder.jpg


BIN
app/src/main/res/drawable-hdpi/t0.jpg


BIN
app/src/main/res/drawable-hdpi/t1.jpg


BIN
app/src/main/res/drawable-hdpi/t2.jpg


BIN
app/src/main/res/drawable-hdpi/t3.jpg


BIN
app/src/main/res/drawable-xhdpi/c0.jpg


BIN
app/src/main/res/drawable-xhdpi/c1.jpg


BIN
app/src/main/res/drawable-xhdpi/c2.jpg


BIN
app/src/main/res/drawable-xhdpi/c3.jpg


BIN
app/src/main/res/drawable-xhdpi/c4.jpg


BIN
app/src/main/res/drawable-xhdpi/placeholder.jpg


BIN
app/src/main/res/drawable-xhdpi/t0.jpg


BIN
app/src/main/res/drawable-xhdpi/t1.jpg


BIN
app/src/main/res/drawable-xhdpi/t2.jpg


BIN
app/src/main/res/drawable-xhdpi/t3.jpg


BIN
app/src/main/res/drawable-xxhdpi/c0.jpg


BIN
app/src/main/res/drawable-xxhdpi/c1.jpg


BIN
app/src/main/res/drawable-xxhdpi/c2.jpg


BIN
app/src/main/res/drawable-xxhdpi/c3.jpg


BIN
app/src/main/res/drawable-xxhdpi/c4.jpg


BIN
app/src/main/res/drawable-xxhdpi/guide0.jpg


BIN
app/src/main/res/drawable-xxhdpi/guide1.jpg


BIN
app/src/main/res/drawable-xxhdpi/guide2.jpg


BIN
app/src/main/res/drawable-xxhdpi/placeholder.jpg


BIN
app/src/main/res/drawable-xxhdpi/t0.jpg


BIN
app/src/main/res/drawable-xxhdpi/t1.jpg


BIN
app/src/main/res/drawable-xxhdpi/t2.jpg


BIN
app/src/main/res/drawable-xxhdpi/t3.jpg


BIN
app/src/main/res/drawable-xxxhdpi/c0.jpg


BIN
app/src/main/res/drawable-xxxhdpi/c1.jpg


BIN
app/src/main/res/drawable-xxxhdpi/c2.jpg


BIN
app/src/main/res/drawable-xxxhdpi/c3.jpg


BIN
app/src/main/res/drawable-xxxhdpi/c4.jpg


BIN
app/src/main/res/drawable-xxxhdpi/guide0.jpg


BIN
app/src/main/res/drawable-xxxhdpi/guide1.jpg


BIN
app/src/main/res/drawable-xxxhdpi/guide2.jpg


BIN
app/src/main/res/drawable-xxxhdpi/placeholder.jpg


BIN
app/src/main/res/drawable-xxxhdpi/t0.jpg


BIN
app/src/main/res/drawable-xxxhdpi/t1.jpg


BIN
app/src/main/res/drawable-xxxhdpi/t2.jpg


BIN
app/src/main/res/drawable-xxxhdpi/t3.jpg


BIN
app/src/main/res/drawable/placeholder.jpg


+ 11 - 6
app/src/main/res/layout/activity_page_style.xml

@@ -19,23 +19,28 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/banner_view"
         android:layout_marginTop="20dp"
-        android:orientation="horizontal"
         android:padding="15dp">
 
         <RadioButton
-            android:id="@+id/rb_multi_page_overlay"
+            android:id="@+id/rb_multi_page"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginEnd="15dp"
-            android:text="MULTI_PAGE_OVERLAY" />
+            android:text="MULTI_PAGE" />
 
         <RadioButton
-            android:id="@+id/rb_multi_page"
+            android:id="@+id/rb_multi_page_scale"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginEnd="15dp"
-            android:text="MULTI_PAGE" />
+            android:layout_marginTop="15dp"
+            android:text="MULTI_PAGE_SCALE" />
 
+        <RadioButton
+            android:id="@+id/rb_multi_page_overlap"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="MULTI_PAGE_OVERLAP" />
 
     </RadioGroup>
 

+ 1 - 2
app/src/main/res/layout/item_custom_view.xml

@@ -8,8 +8,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:contentDescription="@string/guide"
-        android:scaleType="fitXY"
-        android:src="@drawable/guide0" />
+        android:scaleType="fitXY" />
 
     <TextView
         android:id="@+id/btn_start"

+ 1 - 2
app/src/main/res/layout/item_view.xml

@@ -8,8 +8,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:scaleType="fitXY"
-        android:contentDescription="@string/guide"
-        android:src="@drawable/guide0" />
+        android:contentDescription="@string/guide" />
 
     <TextView
         android:id="@+id/btn_start"

+ 15 - 39
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -34,18 +34,17 @@ import com.zhpan.bannerview.utils.DpUtils;
 import com.zhpan.bannerview.adapter.BannerPagerAdapter;
 import com.zhpan.bannerview.holder.HolderCreator;
 import com.zhpan.bannerview.holder.ViewHolder;
-import com.zhpan.bannerview.provider.BannerScroller;
 import com.zhpan.bannerview.provider.ViewStyleSetter;
 import com.zhpan.bannerview.transform.PageTransformerFactory;
 import com.zhpan.bannerview.view.CatchViewPager;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 
 import static com.zhpan.bannerview.constants.IndicatorGravity.CENTER;
 import static com.zhpan.bannerview.constants.IndicatorGravity.END;
 import static com.zhpan.bannerview.constants.IndicatorGravity.START;
+import static com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer.DEFAULT_MIN_SCALE;
 
 /**
  * Created by zhpan on 2017/3/28.
@@ -94,7 +93,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     private int mIndicatorSlideMode;
 
     private HolderCreator<VH> holderCreator;
-    private BannerScroller mScroller;
+//    private BannerScroller mScroller;
     private int indicatorGap;
     private int indicatorHeight;
     private boolean isCustomIndicator;
@@ -118,7 +117,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     };
 
-    public static final int DEFAULT_SCROLL_DURATION = 800;
     private IndicatorMargin mIndicatorMargin;
 
 //    private OnPageSelectedListener mOnPageSelectedListener;
@@ -139,7 +137,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     private void init(AttributeSet attrs) {
         initValues(attrs);
         initView();
-        initScroller();
     }
 
     private void initView() {
@@ -180,18 +177,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     }
 
-    private void initScroller() {
-        try {
-            mScroller = new BannerScroller(mViewPager.getContext());
-            mScroller.setDuration(DEFAULT_SCROLL_DURATION);
-            Field mField = ViewPager.class.getDeclaredField("mScroller");
-            mField.setAccessible(true);
-            mField.set(mViewPager, mScroller);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
     /**
      * 初始化IndicatorView及ViewPager
      */
@@ -309,25 +294,28 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     private void initPageStyle() {
         switch (mPageStyle) {
             case PageStyle.MULTI_PAGE:
-                setMultiPageStyle();
+                setMultiPageStyle(false, 0.999f);
+                break;
+            case PageStyle.MULTI_PAGE_OVERLAP:
+                setMultiPageStyle(true, DEFAULT_MIN_SCALE);
                 break;
-            case PageStyle.MULTI_PAGE_OVERLAY:
-                setMultiPageOverlayStyle();
+            case PageStyle.MULTI_PAGE_SCALE:
+                setMultiPageStyle(false, DEFAULT_MIN_SCALE);
                 break;
         }
     }
 
-    private void setMultiPageOverlayStyle() {
+    private void setMultiPageStyle(boolean cascading, float scale) {
         mPageMargin = mPageMargin == 0 ? DpUtils.dp2px(20) : mPageMargin;
         mRevealWidth = mRevealWidth == 0 ? DpUtils.dp2px(20) : mRevealWidth;
         setClipChildren(false);
         RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mViewPager.getLayoutParams();
         params.leftMargin = mPageMargin + mRevealWidth;
         params.rightMargin = mPageMargin + mRevealWidth;
-        mViewPager.setPageMargin(-mPageMargin);
-        mViewPager.setMultiPageOverlay(true);
+        mViewPager.setCascadingStyle(cascading);
+        mViewPager.setPageMargin(cascading ? -mPageMargin : mPageMargin);
         mViewPager.setOffscreenPageLimit(2);
-        setPageTransformer(new ScaleInTransformer());
+        setPageTransformer(new ScaleInTransformer(scale));
     }
 
     @Override
@@ -537,7 +525,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * @param scrollDuration page滚动时间
      */
     public BannerViewPager<T, VH> setScrollDuration(int scrollDuration) {
-        mScroller.setDuration(scrollDuration);
+        mViewPager.setScrollDuration(scrollDuration);
         return this;
     }
 
@@ -639,7 +627,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     }
 
     /**
-     * 设置IndicatorView滑动模式,默认值{@link IndicatorSlideMode#SMOOTH}
+     * 设置IndicatorView滑动模式,默认值{@link IndicatorSlideMode#NORMAL}
      *
      * @param slideMode Indicator滑动模式
      * @see com.zhpan.bannerview.constants.IndicatorSlideMode#NORMAL
@@ -735,18 +723,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         return this;
     }
 
-    private void setMultiPageStyle() {
-        mPageMargin = mPageMargin == 0 ? DpUtils.dp2px(20) : mPageMargin;
-        mRevealWidth = mRevealWidth == 0 ? DpUtils.dp2px(20) : mRevealWidth;
-        setClipChildren(false);
-        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mViewPager.getLayoutParams();
-        params.leftMargin = mPageMargin + mRevealWidth;
-        params.rightMargin = mPageMargin + mRevealWidth;
-        mViewPager.setPageMargin(mPageMargin);
-        mViewPager.setOffscreenPageLimit(2);
-        setPageTransformer(new ScaleInTransformer());
-    }
-
     /**
      * 设置item间距
      *
@@ -772,7 +748,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     /**
      * 获取BannerViewPager中封装的ViewPager,用于设置BannerViewPager未暴露出来的接口,
      * 比如setCurrentItem等。
-     *
+     * <p>
      * 通过该方法调用getCurrentItem等方法可能会有问题
      * 2.4.1已废弃,可直接调用BannerViewPager中相关方法替代
      *

+ 4 - 4
bannerview/src/main/java/com/zhpan/bannerview/adapter/BannerPagerAdapter.java

@@ -30,10 +30,6 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
 
     private List<View> mViewList = new ArrayList<>();
 
-    public void setCanLoop(boolean canLoop) {
-        isCanLoop = canLoop;
-    }
-
     private int mPageStyle;
 
     public BannerPagerAdapter(List<T> list, HolderCreator<VH> holderCreator) {
@@ -155,6 +151,10 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
         mPageClickListener = pageClickListener;
     }
 
+    public void setCanLoop(boolean canLoop) {
+        isCanLoop = canLoop;
+    }
+
     public void setPageStyle(@APageStyle int pageStyle) {
         mPageStyle = pageStyle;
     }

+ 3 - 2
bannerview/src/main/java/com/zhpan/bannerview/annotation/APageStyle.java

@@ -8,7 +8,8 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 import static com.zhpan.bannerview.constants.PageStyle.MULTI_PAGE;
-import static com.zhpan.bannerview.constants.PageStyle.MULTI_PAGE_OVERLAY;
+import static com.zhpan.bannerview.constants.PageStyle.MULTI_PAGE_OVERLAP;
+import static com.zhpan.bannerview.constants.PageStyle.MULTI_PAGE_SCALE;
 import static com.zhpan.bannerview.constants.PageStyle.NORMAL;
 
 /**
@@ -17,7 +18,7 @@ import static com.zhpan.bannerview.constants.PageStyle.NORMAL;
  *   Description:
  * </pre>
  */
-@IntDef({NORMAL, MULTI_PAGE, MULTI_PAGE_OVERLAY})
+@IntDef({NORMAL, MULTI_PAGE, MULTI_PAGE_OVERLAP,MULTI_PAGE_SCALE})
 @Retention(RetentionPolicy.SOURCE)
 @Target(ElementType.PARAMETER)
 public @interface APageStyle {

+ 8 - 1
bannerview/src/main/java/com/zhpan/bannerview/constants/PageStyle.java

@@ -7,5 +7,12 @@ package com.zhpan.bannerview.constants;
  * </pre>
  */
 public interface PageStyle {
-    int NORMAL = 0, MULTI_PAGE = 1, MULTI_PAGE_OVERLAY = 2;
+
+    int NORMAL = 0;
+
+    int MULTI_PAGE = 1;
+
+    int MULTI_PAGE_OVERLAP = 2;
+
+    int MULTI_PAGE_SCALE = 3;
 }

+ 1 - 1
bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/ScaleInTransformer.java

@@ -8,7 +8,7 @@ import androidx.viewpager.widget.ViewPager;
 
 public class ScaleInTransformer extends BasePageTransformer {
 
-    private static final float DEFAULT_MIN_SCALE = 0.85f;
+    public static final float DEFAULT_MIN_SCALE = 0.85f;
     private float mMinScale = DEFAULT_MIN_SCALE;
 
     public ScaleInTransformer() {

+ 27 - 4
bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java

@@ -9,6 +9,9 @@ import android.util.SparseIntArray;
 import android.view.MotionEvent;
 import android.view.View;
 
+import com.zhpan.bannerview.provider.BannerScroller;
+
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collections;
 
@@ -20,7 +23,10 @@ import java.util.Collections;
 public class CatchViewPager extends ViewPager {
     private ArrayList<Integer> mArrayList = new ArrayList<>();
     private SparseIntArray mSparseIntArray = new SparseIntArray();
-    private boolean mMultiPageOverlay = false;
+    private boolean mCascadingStyle = false;
+    private BannerScroller mBannerScroller;
+    public static final int DEFAULT_SCROLL_DURATION = 800;
+
 
     public CatchViewPager(Context context) {
         this(context, null);
@@ -28,6 +34,7 @@ public class CatchViewPager extends ViewPager {
 
     public CatchViewPager(Context context, AttributeSet attrs) {
         super(context, attrs);
+        hookScroller();
     }
 
     @Override
@@ -40,9 +47,21 @@ public class CatchViewPager extends ViewPager {
         return false;
     }
 
+    private void hookScroller() {
+        try {
+            mBannerScroller = new BannerScroller(getContext());
+            mBannerScroller.setDuration(DEFAULT_SCROLL_DURATION);
+            Field mField = ViewPager.class.getDeclaredField("mScroller");
+            mField.setAccessible(true);
+            mField.set(this, mBannerScroller);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     @Override
     protected int getChildDrawingOrder(int childCount, int i) {
-        if (mMultiPageOverlay) {
+        if (mCascadingStyle) {
             if (i == 0 || mSparseIntArray.size() != childCount) {
                 mArrayList.clear();
                 mSparseIntArray.clear();
@@ -66,7 +85,11 @@ public class CatchViewPager extends ViewPager {
         return array[0] + view.getWidth() / 2;
     }
 
-    public void setMultiPageOverlay(boolean multiPageOverlay) {
-        mMultiPageOverlay = multiPageOverlay;
+    public void setCascadingStyle(boolean cascading) {
+        mCascadingStyle = cascading;
+    }
+
+    public void setScrollDuration(int scrollDuration) {
+        mBannerScroller.setDuration(scrollDuration);
     }
 }

BIN
image/page_style_multi.gif


BIN
image/page_style_multi_scale.gif


BIN
image/qrcode.png