Browse Source

- Support Multi type
- Optimize code

zhpanvip 5 years ago
parent
commit
66e8695d9a
26 changed files with 668 additions and 463 deletions
  1. 2 6
      README.md
  2. 2 6
      README_CN.md
  3. 451 0
      README_v2.x.md
  4. 9 6
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.kt
  5. 2 30
      app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.kt
  6. 32 0
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/HomeAdapter.java
  7. 4 4
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/ImageResourceAdapter.java
  8. 28 0
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/PhotoAdapter.kt
  9. 29 0
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/WelcomeAdapter.kt
  10. 4 25
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java
  11. 3 9
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java
  12. 3 6
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java
  13. 3 7
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java
  14. 6 4
      app/src/main/java/com/example/zhpan/circleviewpager/viewholder/CustomPageViewHolder.java
  15. 4 3
      app/src/main/java/com/example/zhpan/circleviewpager/viewholder/ImageResourceViewHolder.java
  16. 4 3
      app/src/main/java/com/example/zhpan/circleviewpager/viewholder/NetViewHolder.java
  17. 6 3
      app/src/main/java/com/example/zhpan/circleviewpager/viewholder/PhotoViewHolder.kt
  18. 0 74
      bannerview/build.gradle
  19. 52 71
      bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
  20. 14 14
      bannerview/src/main/java/com/zhpan/bannerview/base/BaseBannerAdapter.java
  21. 2 2
      bannerview/src/main/java/com/zhpan/bannerview/base/BaseViewHolder.java
  22. 0 36
      bannerview/src/main/java/com/zhpan/bannerview/provider/BannerScroller.java
  23. 3 2
      bannerview/src/main/java/com/zhpan/bannerview/transform/BaseTransformer.java
  24. 3 3
      bannerview/src/main/java/com/zhpan/bannerview/transform/PageTransformerFactory.java
  25. 2 2
      bannerview/src/main/java/com/zhpan/bannerview/transform/ScaleInTransformer.java
  26. 0 147
      bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java

+ 2 - 6
README.md

@@ -69,7 +69,7 @@ It's also support to custom indicator style,just need extends BaseIndicatorView
 | BannerViewPager<T, VH> setInterval(int interval) | set the interval of item switch interval |The unit is millisecond,default value 3000ms  |
 | BannerViewPager<T, VH> setScrollDuration(int scrollDuration) | set page scroll duration | set page scroll duration |unit is millisecond,default is 500ms |
 | BannerViewPager<T, VH> setRoundCorner(int radius) | set Round Rectangle style for Banner | required SDK_INT>=LOLLIPOP(API 21)  |
-| BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onItemClickListener) | set item click listener |  |
+| BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) | set item click listener |  |
 | BannerViewPager<T, VH> setHolderCreator(HolderCreator\<VH> holderCreator) |set Holder Creator  |You must set HolderCreator for BannerViewPager,or will throw NullPointerException|
 | BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator visibility |default value is VISIBLE,added in version 2.4.2|
 | BannerViewPager<T, VH> setIndicatorStyle(int indicatorStyle) | set indicator style | enum(CIRCLE, DASH、ROUND_RECT) default CIRCLE  |
@@ -391,7 +391,7 @@ public class FigureIndicatorView extends BaseIndicatorView {
  
  - [x] Refactor Indicator again (2.5.0)
  - [x] Fix issue #34 which Indicator smooth slide problem(2.6.1).
- - [ ] Migrate to ViewPager2 (3.0.0)
+ - [x] Migrate to ViewPager2 (3.0.0)
 
 ## FAQ
 
@@ -418,10 +418,6 @@ public class FigureIndicatorView extends BaseIndicatorView {
 
 ## Thanks
 
-[banner](https://github.com/youth5201314/banner)
-
-[Android-ConvenientBanner](https://github.com/saiwu-bigkoo/Android-ConvenientBanner)
-
 [ViewPagerTransforms](https://github.com/ToxicBakery/ViewPagerTransforms)
 
 [玩Android](https://wanandroid.com/)

+ 2 - 6
README_CN.md

@@ -70,7 +70,7 @@ BannerViewPager目前已支持三种IndicatorViewStyle,以及三种IndicatorSlid
 | BannerViewPager<T, VH> setInterval(int interval) | 自动轮播时间间隔 |单位毫秒,默认值3000  |
 | BannerViewPager<T, VH> setScrollDuration(int scrollDuration) | 设置页面滚动时间 | 设置页面滚动时间 |单位毫秒,默认值500  |
 | BannerViewPager<T, VH> setRoundCorner(int radius) | 设置圆角 |默认无圆角 需要SDK_INT>=LOLLIPOP(API 21)  |
-| BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onItemClickListener) | 设置页面点击事件 |  |
+| BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) | 设置页面点击事件 |  |
 | BannerViewPager<T, VH> setHolderCreator(HolderCreator\<VH> holderCreator) |设置HolderCreator  |必须设置HolderCreator,否则会抛出NullPointerException|
 | BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator visibility |默认值VISIBLE 2.4.2 新增|
 | BannerViewPager<T, VH> setIndicatorStyle(int indicatorStyle) | 设置指示器样式 | 可选枚举(CIRCLE, DASH、ROUND_RECT) 默认CIRCLE  |
@@ -391,7 +391,7 @@ public class FigureIndicatorView extends BaseIndicatorView {
  - [x] 重构Indicator,~~尽量修复Indicator SMOOTH模式下滑动问题~~ (2.5.0)
  - [x] 目前Indicator部分代码比较乱,还有很大很大的优化空间,后续版本将持续优化(2.5.0对Indicator再次进行了重构,重构后代码已经很整洁,但仍然有优化空间)
  - [x] 修复 issue #34 Indicator 在Smooth模式下存在的问题 (2.6.1).
- - [ ] ViewPager更换为ViewPager2 (3.0.0)
+ - [x] ViewPager更换为ViewPager2 (3.0.0)
 
 ## 有问题可以扫码加QQ群交流
 
@@ -418,10 +418,6 @@ public class FigureIndicatorView extends BaseIndicatorView {
 
 ## 感谢
 
-[banner](https://github.com/youth5201314/banner)
-
-[Android-ConvenientBanner](https://github.com/saiwu-bigkoo/Android-ConvenientBanner)
-
 [ViewPagerTransforms](https://github.com/ToxicBakery/ViewPagerTransforms)
 
 [玩Android](https://wanandroid.com/)

+ 451 - 0
README_v2.x.md

@@ -0,0 +1,451 @@
+# 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-16%2B-brightgreen.svg?style=flat)
+[![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)
+[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-BannerViewPager-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/7961)
+
+## English | [中文](https://github.com/zhpanvip/BannerViewPager/blob/master/README_CN.md)
+
+> Tencent Video,QQ Music,KuGou,AliPay,Tmall,TaoBao,YouKu,Himalaya,NetEase Music,Bilibili ect. All of above App's Banner can be implements By BannerViewPager.
+
+## Preview
+
+ ### [Click here or scan the QR code to download demo apk](https://github.com/zhpanvip/BannerViewPager/raw/master/app/release/app-release.apk)
+
+![QRCode](https://github.com/zhpanvip/BannerViewPager/blob/master/image/qrcode.png)
+
+
+### 1.PageStyle
+
+[Sample Click Here](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java)
+
+| 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) |
+
+### 2.Indicator
+
+The IndicatorView was split from BannerViewPager,the new repo is [ViewPagerIndicator](https://github.com/zhpanvip/viewpagerindicator),Click the link to see more information about [ViewPagerIndicator](https://github.com/zhpanvip/viewpagerindicator)
+
+#### (1)setIndicatorStyle and setIndicatorSlideMode
+
+BannerViewPager supports three Indicator Styles and three Indicator Slide mode now. 
+
+[Sample Click Here](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java)
+
+| Attrs | CIRCLE | DASH | ROUND_RECT |
+|--|--|--|--|
+| NORMAL| ![CIRCLE_NORMAL](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/slide_circle_normal.gif) | ![DASH_NORMAL](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/style_dash_normal.gif) | ![ROUND_RECT_NORMAL](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/style_round_rect_normal.gif) |
+| SMOOTH| ![CIRCLE_SMOOTH](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/slide_circle_smooth.gif) | ![DASH_SMOOTH](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/style_dash_smooth.gif) | ![ROUND_RECT_SMOOTH](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/style_round_rect_smooth.gif) |
+| WORM| ![CIRCLE_WORM](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/slide_circle_worm.gif) | ![DASH_WORM](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/style_dash_worm.gif) | ![ROUND_WORM](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/style_round_rect_worm.gif) |
+
+#### (2)Custom Indicator
+
+It's also support to custom indicator style,just need extends BaseIndicatorView or implement the IIndicator and override methods, then you can draw Indicators for whatever you want.
+
+[Sample Click Here](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java)
+
+| Figure Indicator | Drawable Indicator | Indicator below of Banner |
+|--|--|--|
+| ![CIRCLE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custum.gif) | ![DASH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custom2.gif) | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custom1.gif) |
+
+
+### 3.PageTransformerStyle
+
+[Sample Click Here](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java)
+
+| parameters | STACK | ROTATE | DEPTH | ACCORDION |
+|--|--|--|--|--|
+| Preview | ![STACK](https://github.com/zhpanvip/BannerViewPager/blob/master/image/transform_stack.gif) | ![ROTATE_DOWN](https://github.com/zhpanvip/BannerViewPager/blob/master/image/transform_rotate.gif) | ![DEPTH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/transform_depth.gif)  |![ACCORDION](https://github.com/zhpanvip/BannerViewPager/blob/master/image/transform_accordion.gif)  |
+
+## API
+
+| Method | Description | Default |
+|--|--|--|
+| BannerViewPager<T, VH> setCanLoop(boolean canLoop) | set is can loop | default value is true|
+| BannerViewPager<T, VH> setAutoPlay(boolean autoPlay) | set is atuo play | default value true|
+| BannerViewPager<T, VH> setInterval(int interval) | set the interval of item switch interval |The unit is millisecond,default value 3000ms  |
+| BannerViewPager<T, VH> setScrollDuration(int scrollDuration) | set page scroll duration | set page scroll duration |unit is millisecond,default is 500ms |
+| BannerViewPager<T, VH> setRoundCorner(int radius) | set Round Rectangle style for Banner | required SDK_INT>=LOLLIPOP(API 21)  |
+| BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) | set item click listener |  |
+| BannerViewPager<T, VH> setHolderCreator(HolderCreator\<VH> holderCreator) |set Holder Creator  |You must set HolderCreator for BannerViewPager,or will throw NullPointerException|
+| BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator visibility |default value is VISIBLE,added in version 2.4.2|
+| BannerViewPager<T, VH> setIndicatorStyle(int indicatorStyle) | set indicator style | enum(CIRCLE, DASH、ROUND_RECT) default CIRCLE  |
+| BannerViewPager<T, VH> setIndicatorGravity(int gravity) | set indicator gravity |enum(CENTER、START、END) default value CENTER |
+| BannerViewPager<T, VH> setIndicatorColor(int normalColor,int checkedColor) | set indicator color |normalColor:color of indicator dot not selected, default value  "#8C6C6D72", checkedColor:color of indicator selected default value is "#8C18171C" |
+| BannerViewPager<T, VH> setIndicatorSlideMode(int slideMode)  | set indicator slide mode | enum(NORMAL;SMOOTH;WORM),default value NORMAL  |
+| BannerViewPager<T, VH> setIndicatorSliderRadius(int radius) | set indicator dot radius | default value is 4dp|
+| BannerViewPager<T, VH> setIndicatorSliderRadius(int normalRadius,int checkRadius)  |set indicator dot radius  |  normalRadius:normal radius of indicator dot,  checkedRadius:checked radius of indicator dot,default value is 4dp |
+| BannerViewPager<T, VH> setIndicatorSliderWidth(int indicatorWidth) | set indicator dot width,if it's Circle indicator the parameter is diameter of circle | default value is 8dp|
+| BannerViewPager<T, VH> setIndicatorSliderWidth(int normalWidth, int checkWidth) | set indicator dot width,if is circle style,the width is diameter of circle | default is 8dp |
+| BannerViewPager<T, VH> setIndicatorHeight(int indicatorHeight) | set indicator hight,it's only used when the indicator style is dash | default value is normalIndicatorWidth/2 |
+| BannerViewPager<T, VH> setIndicatorSliderGap(int indicatorMargin) | set the gap of indicator dot| default value is indicator dot width(or the diameter of circle)|
+| BannerViewPager<T, VH> setIndicatorView(IIndicator indicatorView) | set custom indicator|The custom indicator must extends BaseIndicatorView or implements IIndicator |
+| BannerViewPager<T, VH> setPageTransformerStyle(int style) | set transform style |  |
+| BannerViewPager<T, VH> setCurrentItem(int item) | Set the currently selected page. |  add in v2.3.5 |
+| int getCurrentItem() | get the current page position | added in v2.3.5 |
+| BannerViewPager<T, VH> setPageStyle(PageStyle pageStyle) | setPageStyle | support in v2.4.0. enum(MULTI_PAGE、MULTI_PAGE_SCALE、MULTI_PAGE_OVERLAP)|
+| BannerViewPager<T, VH> setPageMargin(int pageMargin) | set item margin | added in v2.4.0 |
+| BannerViewPager<T, VH> setIndicatorMargin(int left, int top, int right, int bottom) | set margin for indicator | added in v2.4.1 |
+| BannerViewPager<T, VH> setOnPageChangeListener(OnPageChangeListener l) | set page change listener for BannerViewPager | added in v2.4.3 |
+| void startLoop() |start loop | the method will be called when BannerViewPager was initialized |
+| void stopLoop() | stop loop | |
+| List\<T> getList() | get data in BannerViewPager |  |
+| void create(List<T> list) |initialize BannerViewPager  |You must call this method when data is set |
+
+### Attributes in xml
+| Attributes | format | description |
+|--|--|--|
+| bvp_interval | integer | set page switch interval |
+| bvp_scroll_duration | integer | set page scroll duration|
+| bvp_can_loop | boolean|set is can loop |
+| bvp_auto_play | boolean | set is can auto play  |
+| bvp_indicator_checked_color | color | set checked color for indicator |
+| bvp_indicator_normal_color | color | set normal color for indicator |
+| bvp_indicator_radius | dimension | if it's circle style the value is radius of circle,if the indicator style is DASH or ROUND_RECT the value is width/2  |
+| bvp_round_corner| dimension  | set round corner for banner |
+| bvp_page_margin | dimension | set item margin |
+| bvp_reveal_width | dimension | it's only used when the page style is MULTI_PAGE/MULTI_PAGE_SCALE/MULTI_PAGE_OVERLAP,the value is two side item reveal width |
+| bvp_indicator_style | enum | indicator style. enum(circle/dash)  |
+| bvp_indicator_slide_mode | enum | indicator slide mode.enum(normal;smooth;worm) |
+| bvp_indicator_gravity | enum | indicator gravity. enum(center/start/end) |
+| bvp_page_style | enum | page style. enum(normal/multi_page/multi_page_overlap/multi_page_scale) |
+| bvp_transformer_style | enum | transform style. enum(normal/depth/stack/accordion) |
+| bvp_indicator_visibility| enum | indicator visibility(visible/gone/invisible) |
+
+
+## Usage
+
+### 1.Gradle dependency
+   
+
+If you have migrated to Androidx,please add it in your root build.gradle at the end of repositories:
+
+```
+allprojects {
+		repositories {
+			...
+			maven { url 'https://jitpack.io' }
+		}
+	}
+	
+```
+Then add the dependency in your app build.gradle
+
+```
+implementation 'com.github.zhpanvip:BannerViewPager:latestVersion'
+
+```
+
+Androidx latestVersion:[![latestVersion](https://jitpack.io/v/zhpanvip/BannerViewPager.svg)](https://jitpack.io/#zhpanvip/BannerViewPager)
+
+If you are still using android support library,you can add the dependency in your app build.gradle:
+```
+implementation 'com.zhpan.library:bannerview:latestVersion'
+```
+
+Android support latestVersion: [ ![latestVersion](https://api.bintray.com/packages/zhpanvip/CircleViewPager/bannerview/images/download.svg) ](https://bintray.com/zhpanvip/CircleViewPager/bannerview/_latestVersion)
+
+### 2.Add BannerViewPager in layout.xml
+
+```
+    <com.zhpan.bannerview.BannerViewPager
+            android:id="@+id/banner_view"
+            android:layout_width="match_parent"
+            android:layout_margin="10dp"
+            android:layout_height="160dp" />
+```
+
+### 3.The item layout of banner:
+
+```
+    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <ImageView
+            android:id="@+id/banner_image"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="centerCrop" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:background="#66000000"
+            android:gravity="center_vertical">
+
+            <TextView
+                android:id="@+id/tv_describe"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="15dp"
+                android:gravity="center_vertical"
+                android:paddingTop="5dp"
+                android:paddingBottom="5dp"
+                android:textColor="#FFFFFF"
+                android:textSize="16sp" />
+        </LinearLayout>
+
+    </RelativeLayout>
+```
+
+### 4.Set custom ViewHolder for BannerViewPager, the custom ViewHolder must implements com.zhpan.bannerview.holder.ViewHolder:
+
+```
+    public class NetViewHolder implements ViewHolder<CustomBean> {
+
+        @Override
+        public int getLayoutId() {
+            return R.layout.item_net;
+        }
+
+        @Override
+        public void onBind(View itemView, CustomBean data, int position, int size) {
+            CornerImageView imageView = itemView.findViewById(R.id.banner_image);
+            imageView.setRoundCorner(imageView.getContext().getResources().getDimensionPixelOffset(R.dimen.dp_5));
+            Glide.with(imageView).load(data.getImagePath()).placeholder(R.drawable.placeholder).into(imageView);
+        }
+    }
+```
+
+### 5.Use BannerViewPager in Activity or Fragment:
+
+Kotlin:
+
+```
+    private lateinit var mViewPager: BannerViewPager<CustomBean, NetViewHolder>
+    
+    private fun initViewPager() {
+            mBannerViewPager = findViewById(R.id.banner_view)
+            mBannerViewPager.setCanLoop(false)
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                .setIndicatorMargin(0, 0, 0, getResources().getDimensionPixelOffset(R.dimen.dp_40))
+                .setIndicatorGravity(IndicatorGravity.CENTER)
+                .setHolderCreator { NetViewHolder() }
+                .setOnPageChangeListener(
+                    object : OnPageChangeListenerAdapter() {
+                        override fun onPageSelected(position: Int) {
+                            pageSelect(position)
+                        }
+                    }
+                ).setOnPageClickListener {
+                    onPageClick()
+                }
+                .create(res.toList())
+        }
+```    
+
+Java:
+
+```
+    private BannerViewPager<CustomBean, NetViewHolder> mBannerViewPager;
+    ...
+	private void initViewPager() {
+             mBannerViewPager = findViewById(R.id.banner_view);
+             mBannerViewPager.showIndicator(true)
+                .setInterval(3000)
+                .setCanLoop(false)
+                .setAutoPlay(true)
+                .setRoundCorner(getResources().getDimensionPixelOffset(R.dimen.dp_7))
+                .setIndicatorSliderColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
+                .setIndicatorGravity(IndicatorGravity.END)
+                .setScrollDuration(1000).setHolderCreator(NetViewHolder::new)
+                .setOnPageClickListener(position -> {
+                    CustomBean bannerData = mBannerViewPager.getList().get(position);
+                    Toast.makeText(NetworkBannerActivity.this,
+                            "点击了图片" + position + " " + bannerData.getImageDescription(), Toast.LENGTH_SHORT).show();
+
+                }).create(mList);
+        }
+```
+### 6.startLoop and stopLoop
+
+***If the version you used is later than 2.5.0,you don't need care of startLoop and stopLoop in Activity or Fragment. But the two methods is still public.***
+
+Recommend call stopLoop in onPause() and startLoop in onResume() to improve performance:
+
+```
+    @Override
+    protected void onPause() {
+        if (mBannerViewPager != null)
+                mBannerViewPager.stopLoop();
+        super.onPause();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (mBannerViewPager != null)
+            mBannerViewPager.startLoop();
+    }
+```
+
+### 7.Custom IndicatorView
+
+The example will implement an custom IndicatorView as the follow gif.
+
+| Custom IndicatorView Style|
+|--|
+| ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custum.gif) |
+
+**(1)Custom View and extends BaseIndicatorView**
+
+```
+public class FigureIndicatorView extends BaseIndicatorView {
+
+    private int radius = DpUtils.dp2px(20);
+
+    private int backgroundColor = Color.parseColor("#88FF5252");
+
+    private int textColor = Color.WHITE;
+
+    private int textSize=DpUtils.dp2px(13);
+
+    public FigureIndicatorView(Context context) {
+        this(context, null);
+    }
+
+    public FigureIndicatorView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public FigureIndicatorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mPaint = new Paint();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        setMeasuredDimension(2 * radius, 2 * radius);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        mPaint.setColor(backgroundColor);
+        canvas.drawCircle(getWidth() / 2, getHeight() / 2, radius, mPaint);
+        mPaint.setColor(textColor);
+        mPaint.setTextSize(textSize);
+        String text = currentPosition + 1 + "/" + pageSize;
+        int textWidth = (int) mPaint.measureText(text);
+        Paint.FontMetricsInt fontMetricsInt = mPaint.getFontMetricsInt();
+        int baseline = (getMeasuredHeight() - fontMetricsInt.bottom + fontMetricsInt.top) / 2 - fontMetricsInt.top;
+        canvas.drawText(text, (getWidth() - textWidth) / 2, baseline, mPaint);
+    }
+
+    public void setRadius(int radius) {
+        this.radius = radius;
+    }
+
+    @Override
+    public void setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+    }
+
+    public void setTextSize(int textSize) {
+        this.textSize = textSize;
+    }
+
+    public void setTextColor(int textColor) {
+        this.textColor = textColor;
+    }
+}
+```
+**(2)Set custom indicator for BannerViewPager**
+
+```
+    FigureIndicatorView indicatorView = new FigureIndicatorView(mContext);
+    indicatorView.setRadius(getResources().getDimensionPixelOffset(R.dimen.dp_18));
+    indicatorView.setTextSize(getResources().getDimensionPixelOffset(R.dimen.dp_13));
+    indicatorView.setBackgroundColor(Color.parseColor("#aa118EEA"));
+
+    mViewPager.setIndicatorGravity(IndicatorGravity.END)
+              .setIndicatorView(indicatorView)
+              .setHolderCreator(() -> new ImageResourceViewHolder(0))
+              .create(mDrawableList);
+```
+
+## TODO 
+
+ - [x] Optimization and Refactoring IndicatorView(2.0.1)
+
+ - [x] Fix a bug which page frozen sometimes when sliding in version 2.1.0  (2.1.0.1)
+
+ - [x] Set Transform Style Supported(2.1.2)
+
+ - [x] Migrate to Androidx(2.2.0)
+
+ - [x] indicator smooth slide Supported(2.2.2)
+ 
+ - [x] Dash IndicatorView Supported(2.3.+)
+ 
+ - [x] MULTI_PAGE Style Supported(2.4.0)
+ 
+ - [x] Optimize code and improve performance in version 2.4.3
+ 
+ - [x] Refactor Indicator again (2.5.0)
+ - [x] Fix issue #34 which Indicator smooth slide problem(2.6.1).
+ - [ ] Migrate to ViewPager2 (3.0.0)
+
+## FAQ
+
+ **If you have any question regard to BannerViewPager, please scan the QR code and join the QQ group to communicate.**
+
+ ![QQ交流群60902509](https://github.com/zhpanvip/BannerViewPager/blob/master/image/qq_group.png)
+
+
+## <span id="Sponsor"> Sponsor </span>
+
+**开源不易 随心赞赏**
+
+| Alipay | WeChat |
+|--|--|
+| ![Alipay](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/pay_alipay.jpg) |  ![WeChat](https://github.com/zhpanvip/viewpagerindicator/blob/master/image/pay_wechat.png) |
+
+##  More details
+
+[《打造一个丝滑般自动轮播无限循环Android库》](https://juejin.im/post/5d6bce24f265da03db0790d1)
+
+[《BannerViewPager源码解析》](https://juejin.im/post/5d74d3faf265da03b5747015)
+
+[《剖析BannerViewPager中Indicator的设计思想》](https://juejin.im/post/5dda0b6d518825731f569a8c)
+
+## Thanks
+
+[banner](https://github.com/youth5201314/banner)
+
+[Android-ConvenientBanner](https://github.com/saiwu-bigkoo/Android-ConvenientBanner)
+
+[ViewPagerTransforms](https://github.com/ToxicBakery/ViewPagerTransforms)
+
+[玩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.
+
+
+
+
+
+

+ 9 - 6
app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.kt

@@ -4,6 +4,9 @@ package com.example.zhpan.circleviewpager.activity
 import android.os.Bundle
 
 import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.adapter.PhotoAdapter
+import com.example.zhpan.circleviewpager.viewholder.PhotoViewHolder
+import com.zhpan.bannerview.BannerViewPager
 
 class PhotoViewActivity : BaseDataActivity() {
 
@@ -15,11 +18,11 @@ class PhotoViewActivity : BaseDataActivity() {
     }
 
     private fun initViewPager() {
-//        val bannerViewPager = findViewById<BannerViewPager<Int, PhotoViewHolder>>(R.id.viewpager)
-//        bannerViewPager.setAutoPlay(false)
-//                .setCanLoop(false)
-//                .setHolderCreator { PhotoViewHolder() }
-//                .create(mDrawableList)
-//        bannerViewPager.currentItem = 1
+        val bannerViewPager = findViewById<BannerViewPager<Int, PhotoViewHolder>>(R.id.viewpager)
+        bannerViewPager.setAutoPlay(false)
+                .setCanLoop(false)
+                .setAdapter(PhotoAdapter().setData(mDrawableList))
+                .create()
+        bannerViewPager.currentItem = 1
     }
 }

+ 2 - 30
app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.kt

@@ -1,19 +1,17 @@
 package com.example.zhpan.circleviewpager.activity
 
-
 import android.animation.AnimatorSet
 import android.animation.ObjectAnimator
 import android.os.Bundle
 import android.view.View
 import android.view.animation.DecelerateInterpolator
-import android.widget.Toast
 import androidx.core.content.ContextCompat
 import androidx.viewpager2.widget.ViewPager2
 import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.adapter.WelcomeAdapter
 import com.example.zhpan.circleviewpager.bean.CustomBean
 import com.example.zhpan.circleviewpager.viewholder.CustomPageViewHolder
 import com.zhpan.bannerview.BannerViewPager
-import com.zhpan.bannerview.adapter.BaseBannerAdapter
 import com.zhpan.bannerview.constants.TransformerStyle
 import com.zhpan.bannerview.utils.BannerUtils
 import com.zhpan.indicator.enums.IndicatorSlideMode
@@ -59,39 +57,16 @@ class WelcomeActivity : BaseDataActivity() {
                         ContextCompat.getColor(this, R.color.white_alpha_75))
                 .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .setIndicatorSliderRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
+                .setAdapter(WelcomeAdapter().setData(data))
                 .registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                     override fun onPageSelected(position: Int) {
                         BannerUtils.log("position:$position")
                         updateUI(position)
                     }
                 })
-                .setAdapter(getAdapter(data))
                 .create()
     }
 
-    private fun getAdapter(list: List<CustomBean>): BaseBannerAdapter<CustomBean, CustomPageViewHolder> {
-        var adapter = object : BaseBannerAdapter<CustomBean, CustomPageViewHolder>() {
-
-            override fun onBind(holder: CustomPageViewHolder, data: CustomBean, position: Int, pageSize: Int) {
-                holder.bind(data, position, pageSize)
-            }
-
-            override fun createViewHolder(itemView: View): CustomPageViewHolder? {
-                var customPageViewHolder = CustomPageViewHolder(itemView)
-                customPageViewHolder.setOnSubViewClickListener { _, position ->
-                    Toast.makeText(itemView.context, "Logo Clicked Item: $position,currentItem:${mViewPager.currentItem}", Toast.LENGTH_SHORT).show()
-                }
-                return customPageViewHolder
-            }
-
-            override fun getLayoutId(): Int {
-                return R.layout.item_custom_view
-            }
-        }
-        adapter.list = list
-        return adapter
-    }
-
     fun onClick(view: View) {
         MainActivity.start(this)
         finish()
@@ -119,9 +94,6 @@ class WelcomeActivity : BaseDataActivity() {
     }
 
     companion object {
-
         private const val ANIMATION_DURATION = 1300
     }
-
-
 }

+ 32 - 0
app/src/main/java/com/example/zhpan/circleviewpager/adapter/HomeAdapter.java

@@ -0,0 +1,32 @@
+package com.example.zhpan.circleviewpager.adapter;
+
+import android.view.View;
+
+import com.example.zhpan.circleviewpager.R;
+import com.example.zhpan.circleviewpager.net.BannerData;
+import com.example.zhpan.circleviewpager.viewholder.NetViewHolder;
+import com.zhpan.bannerview.base.BaseBannerAdapter;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2020/4/6.
+ *   Description:
+ * </pre>
+ */
+public class HomeAdapter extends BaseBannerAdapter<BannerData, NetViewHolder> {
+    @Override
+    protected void onBind(NetViewHolder holder, BannerData data, int position, int pageSize) {
+        holder.onBind(data, position, pageSize);
+    }
+
+    @Override
+    public NetViewHolder createViewHolder(View itemView, int viewType) {
+        return new NetViewHolder(itemView);
+    }
+
+    @Override
+    public int getLayoutId(int viewType) {
+        return R.layout.item_net;
+    }
+}
+

+ 4 - 4
app/src/main/java/com/example/zhpan/circleviewpager/adapter/ImageResourceAdapter.java

@@ -4,7 +4,7 @@ import android.view.View;
 
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
-import com.zhpan.bannerview.adapter.BaseBannerAdapter;
+import com.zhpan.bannerview.base.BaseBannerAdapter;
 
 /**
  * <pre>
@@ -16,16 +16,16 @@ public class ImageResourceAdapter extends BaseBannerAdapter<Integer, ImageResour
 
     @Override
     protected void onBind(ImageResourceViewHolder holder, Integer data, int position, int pageSize) {
-        holder.bind(data, position, pageSize);
+        holder.onBind(data, position, pageSize);
     }
 
     @Override
-    public ImageResourceViewHolder createViewHolder(View itemView) {
+    public ImageResourceViewHolder createViewHolder(View itemView, int viewType) {
         return new ImageResourceViewHolder(itemView);
     }
 
     @Override
-    public int getLayoutId() {
+    public int getLayoutId(int viewType) {
         return R.layout.item_slide_mode;
     }
 }

+ 28 - 0
app/src/main/java/com/example/zhpan/circleviewpager/adapter/PhotoAdapter.kt

@@ -0,0 +1,28 @@
+package com.example.zhpan.circleviewpager.adapter
+
+import android.view.View
+import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.viewholder.PhotoViewHolder
+import com.zhpan.bannerview.base.BaseBannerAdapter
+
+
+/**
+ * <pre>
+ *   Created by zhpan on 2020/4/5.
+ *   Description:
+ * </pre>
+ */
+class PhotoAdapter : BaseBannerAdapter<Int, PhotoViewHolder>() {
+    override fun onBind(holder: PhotoViewHolder?, data: Int?, position: Int, pageSize: Int) {
+        holder?.onBind(data, position, pageSize)
+    }
+
+    override fun createViewHolder(itemView: View?, viewType: Int): PhotoViewHolder {
+        return PhotoViewHolder(itemView!!)
+    }
+
+    override fun getLayoutId(viewType: Int): Int {
+        return R.layout.item_photo_view;
+    }
+
+}

+ 29 - 0
app/src/main/java/com/example/zhpan/circleviewpager/adapter/WelcomeAdapter.kt

@@ -0,0 +1,29 @@
+package com.example.zhpan.circleviewpager.adapter
+
+import android.view.View
+import com.example.zhpan.circleviewpager.R
+
+import com.example.zhpan.circleviewpager.bean.CustomBean
+import com.example.zhpan.circleviewpager.viewholder.CustomPageViewHolder
+import com.zhpan.bannerview.base.BaseBannerAdapter
+
+/**
+ * <pre>
+ * Created by zhpan on 2020/4/5.
+ * Description:
+</pre> *
+ */
+class WelcomeAdapter : BaseBannerAdapter<CustomBean, CustomPageViewHolder>() {
+
+    override fun onBind(holder: CustomPageViewHolder, data: CustomBean, position: Int, pageSize: Int) {
+        holder.onBind(data, position, pageSize)
+    }
+
+    override fun createViewHolder(itemView: View, viewType: Int): CustomPageViewHolder? {
+        return CustomPageViewHolder(itemView)
+    }
+
+    override fun getLayoutId(viewType: Int): Int {
+        return R.layout.item_custom_view
+    }
+}

+ 4 - 25
app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java

@@ -13,6 +13,7 @@ import androidx.viewpager2.widget.ViewPager2;
 
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.adapter.ArticleAdapter;
+import com.example.zhpan.circleviewpager.adapter.HomeAdapter;
 import com.example.zhpan.circleviewpager.bean.ArticleWrapper;
 import com.example.zhpan.circleviewpager.bean.DataWrapper;
 import com.example.zhpan.circleviewpager.net.BannerData;
@@ -22,7 +23,7 @@ import com.example.zhpan.circleviewpager.viewholder.NetViewHolder;
 import com.scwang.smartrefresh.header.MaterialHeader;
 import com.scwang.smartrefresh.layout.SmartRefreshLayout;
 import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.adapter.BaseBannerAdapter;
+import com.zhpan.bannerview.base.BaseBannerAdapter;
 import com.zhpan.idea.net.common.ResponseObserver;
 import com.zhpan.idea.utils.LogUtils;
 import com.zhpan.idea.utils.RxUtil;
@@ -138,7 +139,6 @@ public class HomeFragment extends BaseFragment {
     }
 
     private void initBanner() {
-        createAdapter();
         mViewPager
                 .setAutoPlay(true)
                 .setCanLoop(true)
@@ -148,8 +148,7 @@ public class HomeFragment extends BaseFragment {
                 .setIndicatorSliderRadius(getResources().getDimensionPixelSize(R.dimen.dp_3))
                 .setIndicatorView(mIndicatorView)// 这里为了设置标题故用了自定义Indicator,如果无需标题则没必要添加此行代码
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                .setAdapter(mBaseBannerAdapter)
-//                .setHolderCreator(NetViewHolder::new)
+                .setAdapter(new HomeAdapter())
                 .registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
                     @Override
                     public void onPageSelected(int position) {
@@ -158,27 +157,7 @@ public class HomeFragment extends BaseFragment {
                         mTvTitle.setText(bannerData.getTitle());
                     }
                 })
-                .setOnItemClickListener(this::onPageClicked);
-    }
-
-    private void createAdapter() {
-        mBaseBannerAdapter = new BaseBannerAdapter<BannerData, NetViewHolder>() {
-
-            @Override
-            protected void onBind(NetViewHolder holder, BannerData data, int position, int pageSize) {
-                holder.bind(data, position, pageSize);
-            }
-
-            @Override
-            public NetViewHolder createViewHolder(View itemView) {
-                return new NetViewHolder(itemView);
-            }
-
-            @Override
-            public int getLayoutId() {
-                return R.layout.item_net;
-            }
-        };
+                .setOnPageClickListener(this::onPageClicked);
     }
 
     private void onPageClicked(int position) {

+ 3 - 9
app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java

@@ -28,7 +28,6 @@ public class IndicatorFragment extends BaseFragment {
     private @AIndicatorSlideMode
     int mSlideMode = IndicatorSlideMode.SMOOTH;
     private int mCheckId = R.id.rb_circle;
-    private ImageResourceAdapter mAdapter;
 
     @Override
     protected int getLayout() {
@@ -66,10 +65,8 @@ public class IndicatorFragment extends BaseFragment {
         mRadioGroupStyle = view.findViewById(R.id.rg_indicator_style);
         mRadioGroupMode = view.findViewById(R.id.rg_slide_mode);
         mViewPager = view.findViewById(R.id.banner_view);
-        mAdapter = new ImageResourceAdapter();
-        mAdapter.setList(getMDrawableList());
-        mViewPager.setAdapter(mAdapter);
         mViewPager.setIndicatorSliderGap(BannerUtils.dp2px(6))
+                .setAdapter(new ImageResourceAdapter().setData(getMDrawableList()))
                 .setRoundCorner(BannerUtils.dp2px(6));
         initRadioGroup();
     }
@@ -128,10 +125,9 @@ public class IndicatorFragment extends BaseFragment {
         mViewPager.setIndicatorStyle(IndicatorStyle.ROUND_RECT)
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorSliderGap(BannerUtils.dp2px(4))
-                .setPageMargin(0)
                 .setIndicatorSlideMode(mSlideMode)
                 .setIndicatorHeight(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                .setOnItemClickListener(position -> ToastUtils.show("position:" + position))
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setIndicatorSliderWidth(normalWidth, checkedWidth).create();
     }
@@ -142,8 +138,7 @@ public class IndicatorFragment extends BaseFragment {
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_6))
                 .setIndicatorHeight(getResources().getDimensionPixelOffset(R.dimen.dp_4))
-                .setPageMargin(0)
-                .setOnItemClickListener(position -> ToastUtils.show("position:" + position))
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setIndicatorSliderRadius(getResources().getDimensionPixelOffset(R.dimen.dp_4)).create();
     }
@@ -156,7 +151,6 @@ public class IndicatorFragment extends BaseFragment {
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorSlideMode(mSlideMode)
                 .setIndicatorSliderGap(getResources().getDimensionPixelOffset(R.dimen.dp_3))
-                .setPageMargin(0)
                 .setIndicatorSliderWidth(normalWidth, checkedWidth)
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .create();

+ 3 - 6
app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java

@@ -73,17 +73,15 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
         mIndicatorView = view.findViewById(R.id.indicator_view);
         view.findViewById(R.id.tv_photo_view).setOnClickListener(this);
         view.findViewById(R.id.btn_refresh).setOnClickListener(v -> updateData());
-        ImageResourceAdapter adapter = new ImageResourceAdapter();
-        adapter.setList(getMDrawableList());
         mViewPager.setIndicatorSliderGap(BannerUtils.dp2px(6))
                 .setRoundCorner(BannerUtils.dp2px(6))
-                .setOnItemClickListener(position -> {
+                .setOnPageClickListener(position -> {
                     ToastUtils.show("position:" + position);
                     int currentItem = mViewPager.getCurrentItem();
                     LogUtils.e("currentItem:", currentItem + "");
                 })
-                .setAdapter(adapter)
-//                .setOnItemClickListener(position -> ToastUtils.show("Position:" + position))
+                .setAdapter(new ImageResourceAdapter().setData(getMDrawableList()))
+                .setOnPageClickListener(position -> ToastUtils.show("Position:" + position))
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color));
         initRadioGroup();
     }
@@ -153,7 +151,6 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
         mViewPager.setAutoPlay(false).setCanLoop(true)
                 .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
                 .setIndicatorVisibility(View.VISIBLE)
-                .setPageMargin(BannerUtils.dp2px(20))
                 .setIndicatorGravity(IndicatorGravity.END)
                 .setIndicatorView(setupIndicatorView()).create();
     }

+ 3 - 7
app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java

@@ -59,14 +59,12 @@ public class PageFragment extends BaseFragment {
         mViewPager = view.findViewById(R.id.banner_view);
         mRadioGroupPageStyle = view.findViewById(R.id.rg_page_style);
         radioButton = view.findViewById(R.id.rb_multi_page);
-        ImageResourceAdapter adapter = new ImageResourceAdapter();
-        adapter.setList(getMDrawableList());
         mViewPager
                 .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setIndicatorSliderRadius(getResources().getDimensionPixelOffset(R.dimen.dp_4), getResources().getDimensionPixelOffset(R.dimen.dp_5))
-                .setOnItemClickListener(position -> ToastUtils.show("position:" + position))
-                .setAdapter(adapter)
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
+                .setAdapter(new ImageResourceAdapter().setData(getMDrawableList()))
                 .setInterval(5000);
         initRadioGroup();
     }
@@ -93,7 +91,6 @@ public class PageFragment extends BaseFragment {
 
     private void setupBanner(@APageStyle int pageStyle) {
         mViewPager
-                .setPageMargin(getResources().getDimensionPixelOffset(R.dimen.dp_10))
                 .setRevealWidth(getResources().getDimensionPixelOffset(R.dimen.dp_10))
                 .setPageStyle(pageStyle)
                 .create();
@@ -102,11 +99,10 @@ public class PageFragment extends BaseFragment {
     //  仿QQ音乐的Banner
     private void setNetEaseMusicStyle() {
         mViewPager
-                .setPageMargin(getResources().getDimensionPixelOffset(R.dimen.dp_15))
                 .setRevealWidth(BannerUtils.dp2px(0))
                 .setPageStyle(PageStyle.MULTI_PAGE)
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                .setOnItemClickListener(position -> ToastUtils.show("position:" + position))
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setInterval(5000).create();
     }
 }

+ 6 - 4
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/CustomPageViewHolder.java

@@ -8,20 +8,22 @@ import androidx.annotation.NonNull;
 
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.bean.CustomBean;
-import com.zhpan.bannerview.holder.BaseViewHolder;
+import com.zhpan.bannerview.base.BaseViewHolder;
 
 public class CustomPageViewHolder extends BaseViewHolder<CustomBean> {
 
     private OnSubViewClickListener mOnSubViewClickListener;
+    private ImageView imageView;
+    private ImageView imageStart;
 
     public CustomPageViewHolder(@NonNull View itemView) {
         super(itemView);
+        imageView = itemView.findViewById(R.id.banner_image);
+        imageStart = itemView.findViewById(R.id.iv_logo);
     }
 
     @Override
-    public void bind(CustomBean data, int position, int pageSize) {
-        ImageView imageView = itemView.findViewById(R.id.banner_image);
-        ImageView imageStart = itemView.findViewById(R.id.iv_logo);
+    public void onBind(CustomBean data, int position, int pageSize) {
         imageView.setImageResource(data.getImageRes());
         imageStart.setOnClickListener(view -> {
             if (null != mOnSubViewClickListener)

+ 4 - 3
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/ImageResourceViewHolder.java

@@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
 
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.view.CornerImageView;
-import com.zhpan.bannerview.holder.BaseViewHolder;
+import com.zhpan.bannerview.base.BaseViewHolder;
 
 /**
  * <pre>
@@ -17,14 +17,15 @@ import com.zhpan.bannerview.holder.BaseViewHolder;
 public class ImageResourceViewHolder extends BaseViewHolder<Integer> {
 
     private int roundCorner;
+    private CornerImageView imageView;
 
     public ImageResourceViewHolder(@NonNull View itemView) {
         super(itemView);
+        imageView = itemView.findViewById(R.id.banner_image);
     }
 
     @Override
-    public void bind(Integer data, int position, int pageSize) {
-        CornerImageView imageView = itemView.findViewById(R.id.banner_image);
+    public void onBind(Integer data, int position, int pageSize) {
         imageView.setImageResource(data);
         imageView.setRoundCorner(roundCorner);
     }

+ 4 - 3
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/NetViewHolder.java

@@ -8,7 +8,7 @@ import com.bumptech.glide.Glide;
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.net.BannerData;
 import com.example.zhpan.circleviewpager.view.CornerImageView;
-import com.zhpan.bannerview.holder.BaseViewHolder;
+import com.zhpan.bannerview.base.BaseViewHolder;
 import com.zhpan.bannerview.utils.BannerUtils;
 
 /**
@@ -18,14 +18,15 @@ import com.zhpan.bannerview.utils.BannerUtils;
  * </pre>
  */
 public class NetViewHolder extends BaseViewHolder<BannerData> {
+    private CornerImageView imageView;
 
     public NetViewHolder(@NonNull View itemView) {
         super(itemView);
+        imageView = itemView.findViewById(R.id.banner_image);
     }
 
     @Override
-    public void bind(BannerData data, int position, int pageSize) {
-        CornerImageView imageView = itemView.findViewById(R.id.banner_image);
+    public void onBind(BannerData data, int position, int pageSize) {
         imageView.setRoundCorner(BannerUtils.dp2px(0));
         Glide.with(imageView).load(data.getImagePath()).placeholder(R.drawable.placeholder).into(imageView);
     }

+ 6 - 3
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/PhotoViewHolder.kt

@@ -1,11 +1,12 @@
 package com.example.zhpan.circleviewpager.viewholder
 
 import android.view.View
+import android.widget.ImageView
 import android.widget.Toast
 
 import com.example.zhpan.circleviewpager.R
 import com.github.chrisbanes.photoview.PhotoView
-import com.zhpan.bannerview.holder.BaseViewHolder
+import com.zhpan.bannerview.base.BaseViewHolder
 
 /**
  * Created by zhpan on 2017/10/30.
@@ -13,8 +14,10 @@ import com.zhpan.bannerview.holder.BaseViewHolder
  */
 
 class PhotoViewHolder(itemView: View) : BaseViewHolder<Int>(itemView) {
-    override fun bind(data: Int?, position: Int, size: Int) {
-        val imageView = itemView.findViewById<PhotoView>(R.id.banner_image)
+
+    private var imageView: ImageView = itemView.findViewById<PhotoView>(R.id.banner_image)
+
+    override fun onBind(data: Int?, position: Int, size: Int) {
         imageView.setImageResource(data!!)
         imageView.setOnClickListener { v ->
             Toast.makeText(itemView.context, "$adapterPosition  页面数$size", Toast.LENGTH_SHORT).show()

+ 0 - 74
bannerview/build.gradle

@@ -33,77 +33,3 @@ dependencies {
     api 'com.github.zhpanvip:viewpagerindicator:1.0.0'
     implementation 'androidx.viewpager2:viewpager2:1.0.0'
 }
-
-version = "2.6.4"
-def siteUrl = 'https://github.com/zhpanvip/BannerViewPager'      // 项目的主页
-def gitUrl = 'https://github.com/zhpanvip/BannerViewPager.git'   // Git仓库的url
-group = "com.zhpan.library" // Maven Group ID for the artifact,一般填你唯一的包名
-install {
-    repositories.mavenInstaller {
-        // This generates POM.xml with proper parameters
-        pom {
-            project {
-                packaging 'aar'
-                // Add your description here
-                description 'Banner ViewPager for Android'
-                name 'Banner ViewPager for Android'  //项目描述
-                url siteUrl
-                // Set your license
-                licenses {
-                    license {
-                        name 'The Apache Software License, Version 2.0'
-                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
-                    }
-                }
-                developers {
-                    developer { // 开发者信息
-                        id 'zhpan'
-                        name 'zhangpan'
-                        email 'zhpanvip@outlook.com'
-                    }
-                }
-                scm {
-                    connection gitUrl
-                    developerConnection gitUrl
-                    url siteUrl
-                }
-            }
-        }
-    }
-}
-task sourcesJar(type: Jar) {
-    from android.sourceSets.main.java.srcDirs
-    classifier = 'sources'
-}
-task javadoc(type: Javadoc) {
-    failOnError false
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc) {
-    classifier = 'javadoc'
-    from javadoc.destinationDir
-}
-artifacts {
-    archives javadocJar
-    archives sourcesJar
-}
-Properties properties = new Properties()
-// 加载本地配置
-properties.load(project.rootProject.file('local.properties').newDataInputStream())
-bintray {
-    user = properties.getProperty("bintray.user")
-    key = properties.getProperty("bintray.apikey")
-    configurations = ['archives']
-    pkg {
-        repo = "CircleViewPager"  //发布到Bintray的那个仓库里,默认账户有四个库,我们这里上传到maven库
-        name = "bannerview"  //发布到Bintray上的项目名字
-        websiteUrl = siteUrl
-        vcsUrl = gitUrl
-        licenses = ["Apache-2.0"]
-        publish = true
-    }
-}
-
-//提交命令:gradlew bintrayUpload
-
-// mac ./gradlew bintrayUpload  没有权限使用申请 chmod +x gradlew

+ 52 - 71
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -6,7 +6,6 @@ import android.os.Handler;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.Nullable;
-import androidx.viewpager.widget.ViewPager;
 import androidx.viewpager2.widget.ViewPager2;
 
 import android.util.AttributeSet;
@@ -15,15 +14,16 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.RelativeLayout;
 
-import com.zhpan.bannerview.adapter.BaseBannerAdapter;
+import com.zhpan.bannerview.base.BaseBannerAdapter;
 import com.zhpan.bannerview.annotation.AIndicatorGravity;
 import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.annotation.ATransformerStyle;
 import com.zhpan.bannerview.annotation.Visibility;
 import com.zhpan.bannerview.constants.PageStyle;
-import com.zhpan.bannerview.holder.BaseViewHolder;
+import com.zhpan.bannerview.base.BaseViewHolder;
 import com.zhpan.bannerview.manager.BannerManager;
 import com.zhpan.bannerview.manager.BannerOptions;
+import com.zhpan.bannerview.transform.PageTransformerFactory;
 import com.zhpan.bannerview.transform.ScaleInTransformer;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.bannerview.provider.ViewStyleSetter;
@@ -34,7 +34,7 @@ import com.zhpan.indicator.base.IIndicator;
 
 import java.util.List;
 
-import static com.zhpan.bannerview.adapter.BaseBannerAdapter.MAX_VALUE;
+import static com.zhpan.bannerview.base.BaseBannerAdapter.MAX_VALUE;
 import static com.zhpan.bannerview.constants.IndicatorGravity.CENTER;
 import static com.zhpan.bannerview.constants.IndicatorGravity.END;
 import static com.zhpan.bannerview.constants.IndicatorGravity.START;
@@ -50,20 +50,22 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
 
     private boolean isCustomIndicator;
 
-    private OnItemClickListener mOnItemClickListener;
+    private OnPageClickListener mOnPageClickListener;
 
     private IIndicator mIndicatorView;
 
     private RelativeLayout mIndicatorLayout;
 
-//    private CatchViewPager mViewPager;
-
     private ViewPager2 mViewPager;
 
     private BannerManager mBannerManager;
 
     private Handler mHandler = new Handler();
 
+    private BaseBannerAdapter<T, VH> mBannerPagerAdapter;
+
+    private ViewPager2.OnPageChangeCallback onPageChangeCallback;
+
     private Runnable mRunnable = new Runnable() {
         @Override
         public void run() {
@@ -121,25 +123,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
                 getParent().requestDisallowInterceptTouchEvent(true);
                 break;
             case MotionEvent.ACTION_MOVE:
-                int endX = (int) ev.getX();
-                int endY = (int) ev.getY();
-                int disX = Math.abs(endX - startX);
-                int disY = Math.abs(endY - startY);
-                if (disX > disY) {
-                    if (!isCanLoop()) {
-                        if (currentPosition == 0 && endX - startX > 0) {
-                            getParent().requestDisallowInterceptTouchEvent(false);
-                        } else if (currentPosition == getList().size() - 1 && endX - startX < 0) {
-                            getParent().requestDisallowInterceptTouchEvent(false);
-                        } else {
-                            getParent().requestDisallowInterceptTouchEvent(true);
-                        }
-                    } else {
-                        getParent().requestDisallowInterceptTouchEvent(true);
-                    }
-                } else if (2 * disX < disY) {
-                    getParent().requestDisallowInterceptTouchEvent(false);
-                }
+                onActionMove(ev);
                 break;
             case MotionEvent.ACTION_UP:
             case MotionEvent.ACTION_CANCEL:
@@ -155,6 +139,28 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         return super.dispatchTouchEvent(ev);
     }
 
+    private void onActionMove(MotionEvent ev) {
+        int endX = (int) ev.getX();
+        int endY = (int) ev.getY();
+        int disX = Math.abs(endX - startX);
+        int disY = Math.abs(endY - startY);
+        if (disX > disY) {
+            if (!isCanLoop()) {
+                if (currentPosition == 0 && endX - startX > 0) {
+                    getParent().requestDisallowInterceptTouchEvent(false);
+                } else if (currentPosition == getList().size() - 1 && endX - startX < 0) {
+                    getParent().requestDisallowInterceptTouchEvent(false);
+                } else {
+                    getParent().requestDisallowInterceptTouchEvent(true);
+                }
+            } else {
+                getParent().requestDisallowInterceptTouchEvent(true);
+            }
+        } else if (2 * disX < disY) {
+            getParent().requestDisallowInterceptTouchEvent(false);
+        }
+    }
+
     private ViewPager2.OnPageChangeCallback mOnPageChangeCallback = new ViewPager2.OnPageChangeCallback() {
         @Override
         public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -206,7 +212,8 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         }
     }
 
-    private void initBannerData(List<T> list) {
+    private void initBannerData() {
+        List<T> list = mBannerPagerAdapter.getData();
         if (list != null) {
             setIndicatorValues(list);
             setupViewPager(list);
@@ -280,7 +287,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         }
         currentPosition = 0;
         mBannerPagerAdapter.setCanLoop(isCanLoop());
-        mBannerPagerAdapter.setPageClickListener(mOnItemClickListener);
+        mBannerPagerAdapter.setPageClickListener(mOnPageClickListener);
         mViewPager.setAdapter(mBannerPagerAdapter);
         if (list.size() > 1 && isCanLoop()) {
             mViewPager.setCurrentItem(MAX_VALUE / 2 - ((MAX_VALUE / 2) % list.size()) + 1, false);
@@ -296,9 +303,6 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         startLoop();
     }
 
-
-    private BaseBannerAdapter<T, VH> mBannerPagerAdapter;
-
     private void initPageStyle() {
         switch (mBannerManager.bannerOptions().getPageStyle()) {
             case PageStyle.MULTI_PAGE:
@@ -350,7 +354,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
      * @return BannerViewPager data set
      */
     public List<T> getList() {
-        return mBannerPagerAdapter.getList();
+        return mBannerPagerAdapter.getData();
     }
 
     /**
@@ -379,6 +383,10 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         return this;
     }
 
+    public BaseBannerAdapter<T, VH> getAdapter() {
+        return mBannerPagerAdapter;
+    }
+
     /**
      * Set round rectangle effect for BannerViewPager.
      * <p>
@@ -451,25 +459,26 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
      * @see com.zhpan.bannerview.constants.TransformerStyle#ACCORDION
      */
     public BannerViewPager<T, VH> setPageTransformerStyle(@ATransformerStyle int style) {
-//        mViewPager.setPageTransformer(true, new PageTransformerFactory().createPageTransformer(style));
+        mViewPager.setPageTransformer(new PageTransformerFactory().createPageTransformer(style));
         return this;
     }
 
     /**
      * @param transformer PageTransformer that will modify each page's animation properties
      */
-    public void setPageTransformer(@Nullable ViewPager.PageTransformer transformer) {
-//        mViewPager.setPageTransformer(true, transformer);
+    public void setPageTransformer(@Nullable ViewPager2.PageTransformer transformer) {
+        if (transformer != null)
+            mViewPager.setPageTransformer(transformer);
     }
 
 
     /**
      * set item click listener
      *
-     * @param onItemClickListener item click listener
+     * @param onPageClickListener item click listener
      */
-    public BannerViewPager<T, VH> setOnItemClickListener(OnItemClickListener onItemClickListener) {
-        this.mOnItemClickListener = onItemClickListener;
+    public BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) {
+        this.mOnPageClickListener = onPageClickListener;
         return this;
     }
 
@@ -622,11 +631,10 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
     }
 
     public void create() {
-        if (mBannerPagerAdapter != null)
-            initBannerData(mBannerPagerAdapter.getList());
-        else {
+        if (mBannerPagerAdapter == null) {
             throw new NullPointerException("You must set adapter for BannerViewPager");
         }
+        initBannerData();
     }
 
     /**
@@ -639,15 +647,10 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         return this;
     }
 
-    public void notifyDataSetChanged() {
-        mBannerPagerAdapter.notifyDataSetChanged();
-        initBannerData(mBannerPagerAdapter.getList());
-    }
-
     public void refresh(List<T> list) {
         if (list != null && mBannerPagerAdapter != null) {
-            mBannerPagerAdapter.setList(list);
-            initBannerData(mBannerPagerAdapter.getList());
+            mBannerPagerAdapter.setData(list);
+            initBannerData();
         }
     }
 
@@ -699,16 +702,6 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         return this;
     }
 
-    /**
-     * set page margin
-     *
-     * @param pageMargin page margin
-     */
-    public BannerViewPager<T, VH> setPageMargin(int pageMargin) {
-        mBannerManager.bannerOptions().setPageMargin(pageMargin);
-//        mViewPager.setPageMargin(pageMargin);
-        return this;
-    }
 
     /**
      * @param revealWidth 一屏多页模式下两边页面显露出来的宽度
@@ -748,12 +741,10 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         return this;
     }
 
-    public interface OnItemClickListener {
+    public interface OnPageClickListener {
         void onPageClick(int position);
     }
 
-    private ViewPager2.OnPageChangeCallback onPageChangeCallback;
-
     public BannerViewPager<T, VH> registerOnPageChangeCallback(ViewPager2.OnPageChangeCallback onPageChangeCallback) {
         this.onPageChangeCallback = onPageChangeCallback;
         return this;
@@ -857,14 +848,4 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
         return this;
     }
 
-    /**
-     * @param onPageClickListener item click listener
-     * @deprecated use {@link #setOnItemClickListener(OnItemClickListener)} instead
-     * set item click listener
-     */
-    @Deprecated
-    public BannerViewPager<T, VH> setOnPageClickListener(OnItemClickListener onPageClickListener) {
-        this.mOnItemClickListener = onPageClickListener;
-        return this;
-    }
 }

+ 14 - 14
bannerview/src/main/java/com/zhpan/bannerview/adapter/BaseBannerAdapter.java → bannerview/src/main/java/com/zhpan/bannerview/base/BaseBannerAdapter.java

@@ -1,4 +1,4 @@
-package com.zhpan.bannerview.adapter;
+package com.zhpan.bannerview.base;
 
 import android.view.LayoutInflater;
 import android.view.View;
@@ -8,7 +8,6 @@ import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.holder.BaseViewHolder;
 import com.zhpan.bannerview.utils.BannerUtils;
 
 import java.util.ArrayList;
@@ -21,13 +20,13 @@ public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder> extends Re
     private List<T> mList = new ArrayList<>();
     private boolean isCanLoop;
     public static final int MAX_VALUE = 500;
-    private BannerViewPager.OnItemClickListener mPageClickListener;
+    private BannerViewPager.OnPageClickListener mPageClickListener;
 
     @NonNull
     @Override
     public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
-        View inflate = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(), parent, false);
-        return createViewHolder(inflate);
+        View inflate = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(viewType), parent, false);
+        return createViewHolder(inflate, viewType);
     }
 
     @Override
@@ -44,12 +43,6 @@ public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder> extends Re
         });
     }
 
-    protected abstract void onBind(VH holder, T data, int position, int pageSize);
-
-    public abstract VH createViewHolder(View itemView);
-
-    public abstract int getLayoutId();
-
     @Override
     public int getItemCount() {
         if (isCanLoop && mList.size() > 1) {
@@ -59,26 +52,33 @@ public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder> extends Re
         }
     }
 
-    public List<T> getList() {
+    public List<T> getData() {
         return mList;
     }
 
-    public void setList(List<T> list) {
+    public BaseBannerAdapter<T, VH> setData(List<T> list) {
         if (null != list) {
             mList.clear();
             mList.addAll(list);
         }
+        return this;
     }
 
     public void setCanLoop(boolean canLoop) {
         isCanLoop = canLoop;
     }
 
-    public void setPageClickListener(BannerViewPager.OnItemClickListener pageClickListener) {
+    public void setPageClickListener(BannerViewPager.OnPageClickListener pageClickListener) {
         mPageClickListener = pageClickListener;
     }
 
     public int getListSize() {
         return mList.size();
     }
+
+    protected abstract void onBind(VH holder, T data, int position, int pageSize);
+
+    public abstract VH createViewHolder(View itemView, int viewType);
+
+    public abstract int getLayoutId(int viewType);
 }

+ 2 - 2
bannerview/src/main/java/com/zhpan/bannerview/holder/BaseViewHolder.java → bannerview/src/main/java/com/zhpan/bannerview/base/BaseViewHolder.java

@@ -1,4 +1,4 @@
-package com.zhpan.bannerview.holder;
+package com.zhpan.bannerview.base;
 
 import android.view.View;
 
@@ -17,5 +17,5 @@ public abstract class BaseViewHolder<T> extends RecyclerView.ViewHolder {
         super(itemView);
     }
 
-    public abstract void bind(T data, int position, int pageSize);
+    public abstract void onBind(T data, int position, int pageSize);
 }

+ 0 - 36
bannerview/src/main/java/com/zhpan/bannerview/provider/BannerScroller.java

@@ -1,36 +0,0 @@
-package com.zhpan.bannerview.provider;
-
-import android.content.Context;
-import android.view.animation.Interpolator;
-import android.widget.Scroller;
-
-public class BannerScroller extends Scroller {
-    private int mDuration = 1000;
-
-    public BannerScroller(Context context) {
-        super(context);
-    }
-
-    public BannerScroller(Context context, Interpolator interpolator) {
-        super(context, interpolator);
-    }
-
-    public BannerScroller(Context context, Interpolator interpolator, boolean flywheel) {
-        super(context, interpolator, flywheel);
-    }
-
-    @Override
-    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
-        super.startScroll(startX, startY, dx, dy, mDuration);
-    }
-
-    @Override
-    public void startScroll(int startX, int startY, int dx, int dy) {
-        super.startScroll(startX, startY, dx, dy, mDuration);
-    }
-
-    public void setDuration(int time) {
-        mDuration = time;
-    }
-
-}

+ 3 - 2
bannerview/src/main/java/com/zhpan/bannerview/transform/BaseTransformer.java

@@ -16,10 +16,11 @@
 
 package com.zhpan.bannerview.transform;
 
-import androidx.viewpager.widget.ViewPager.PageTransformer;
+import androidx.viewpager2.widget.ViewPager2;
+
 import android.view.View;
 
-public abstract class BaseTransformer implements PageTransformer {
+public abstract class BaseTransformer implements ViewPager2.PageTransformer {
 
     /**
      * Called each {@link #transformPage(View, float)}.

+ 3 - 3
bannerview/src/main/java/com/zhpan/bannerview/transform/PageTransformerFactory.java

@@ -1,6 +1,6 @@
 package com.zhpan.bannerview.transform;
 
-import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
 
 import static com.zhpan.bannerview.constants.TransformerStyle.ACCORDION;
 import static com.zhpan.bannerview.constants.TransformerStyle.DEPTH;
@@ -11,8 +11,8 @@ import static com.zhpan.bannerview.constants.TransformerStyle.STACK;
 
 public class PageTransformerFactory {
 
-    public ViewPager.PageTransformer createPageTransformer(int transformerStyle) {
-        ViewPager.PageTransformer transformer = null;
+    public ViewPager2.PageTransformer createPageTransformer(int transformerStyle) {
+        ViewPager2.PageTransformer transformer = null;
         switch (transformerStyle) {
             case DEPTH:
                 transformer = new DepthPageTransformer();

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

@@ -2,9 +2,9 @@ package com.zhpan.bannerview.transform;
 
 import android.view.View;
 
-import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
 
-public class ScaleInTransformer implements ViewPager.PageTransformer {
+public class ScaleInTransformer implements ViewPager2.PageTransformer {
 
     private static final float DEFAULT_CENTER = 0.5f;
     public static final float DEFAULT_MIN_SCALE = 0.85f;

+ 0 - 147
bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java

@@ -1,147 +0,0 @@
-package com.zhpan.bannerview.view;
-
-import android.annotation.SuppressLint;
-import android.content.Context;
-
-import androidx.viewpager.widget.ViewPager;
-
-import android.util.AttributeSet;
-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;
-
-import static com.zhpan.bannerview.manager.BannerOptions.DEFAULT_SCROLL_DURATION;
-
-/**
- * Author zhangpan
- * Time:2018/11/14 15:24
- * Description:处理嵌套PhotoView缩放引起的crash.
- */
-public class CatchViewPager extends ViewPager {
-    private ArrayList<Integer> mArrayList = new ArrayList<>();
-    private SparseIntArray mSparseIntArray = new SparseIntArray();
-    private boolean mOverlapStyle = false;
-    private BannerScroller mBannerScroller;
-    private boolean disableTouchScroll;
-    private boolean firstLayout = true;
-
-    public CatchViewPager(Context context) {
-        this(context, null);
-    }
-
-    public CatchViewPager(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        hookScroller();
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        try {
-            if (disableTouchScroll) {
-                return false;
-            }
-            return super.onInterceptTouchEvent(ev);
-        } catch (IllegalArgumentException ex) {
-            ex.printStackTrace();
-        }
-        return false;
-    }
-
-    @Override
-    protected int getChildDrawingOrder(int childCount, int i) {
-        if (mOverlapStyle) {
-            if (i == 0 || mSparseIntArray.size() != childCount) {
-                mArrayList.clear();
-                mSparseIntArray.clear();
-                int viewCenterX = getViewCenterX(this);
-                for (int index = 0; index < childCount; ++index) {
-                    int indexAbs = Math.abs(viewCenterX - getViewCenterX(getChildAt(index)));
-                    mArrayList.add(++indexAbs);
-                    mSparseIntArray.append(indexAbs, index);
-                }
-                Collections.sort(mArrayList);
-            }
-            return mSparseIntArray.get(mArrayList.get(childCount - 1 - i));
-        } else {
-            return super.getChildDrawingOrder(childCount, i);
-        }
-    }
-
-    private int getViewCenterX(View view) {
-        int[] array = new int[2];
-        view.getLocationOnScreen(array);
-        return array[0] + view.getWidth() / 2;
-    }
-
-    public void setOverlapStyle(boolean overlapStyle) {
-        mOverlapStyle = overlapStyle;
-    }
-
-    public void setScrollDuration(int scrollDuration) {
-        mBannerScroller.setDuration(scrollDuration);
-    }
-
-    @SuppressLint("ClickableViewAccessibility")
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (disableTouchScroll) {
-            return false;
-        }
-        return super.onTouchEvent(ev);
-    }
-
-    public void disableTouchScroll(boolean disableTouchScroll) {
-        this.disableTouchScroll = disableTouchScroll;
-    }
-
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        hookFirstLayout();
-    }
-
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        firstLayout = 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 (IllegalAccessException e) {
-            e.printStackTrace();
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void hookFirstLayout() {
-        try {
-            Field mFirstLayout = ViewPager.class.getDeclaredField("mFirstLayout");
-            mFirstLayout.setAccessible(true);
-            mFirstLayout.set(this, firstLayout);
-            setCurrentItem(getCurrentItem());
-        } catch (IllegalAccessException  e) {
-            e.printStackTrace();
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void setFirstLayout(boolean firstLayout) {
-        this.firstLayout = firstLayout;
-    }
-}