浏览代码

release 2.5.0

Merge branch 'dev_2.5.0_2' into jc_2.5.0

# Conflicts:
#	README.md
#	app/build.gradle
#	app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.java
#	app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java
#	app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java
#	app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java
#	app/src/main/java/com/example/zhpan/circleviewpager/adapter/ArticleAdapter.java
#	app/src/main/java/com/example/zhpan/circleviewpager/bean/CustomBean.java
#	app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java
#	app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java
#	app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java
#	app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java
#	app/src/main/java/com/example/zhpan/circleviewpager/net/ApiService.java
#	app/src/main/java/com/example/zhpan/circleviewpager/view/CornerImageView.java
#	bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
#	bannerview/src/main/java/com/zhpan/bannerview/annotation/Visibility.java
#	bannerview/src/main/java/com/zhpan/bannerview/holder/ViewHolder.java
#	bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java
#	bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java
#	bannerview/src/main/java/com/zhpan/bannerview/indicator/DashIndicatorView.java
#	bannerview/src/main/java/com/zhpan/bannerview/indicator/IIndicator.java
#	bannerview/src/main/java/com/zhpan/bannerview/manager/AttributeController.java
#	bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java
#	bannerview/src/main/java/com/zhpan/bannerview/manager/IndicatorOptions.java
#	download/app.apk
zhpanvip 5 年之前
父节点
当前提交
149a386c68
共有 65 个文件被更改,包括 951 次插入949 次删除
  1. 12 0
      .github/FUNDING.yml
  2. 1 2
      .gitignore
  3. 29 3
      README.md
  4. 5 3
      app/build.gradle
  5. 0 26
      app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.java
  6. 24 0
      app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.kt
  7. 0 88
      app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java
  8. 74 0
      app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.kt
  9. 0 30
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.java
  10. 30 0
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.kt
  11. 0 118
      app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java
  12. 111 0
      app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.kt
  13. 0 62
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java
  14. 55 0
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.kt
  15. 0 66
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/ArticleAdapter.java
  16. 50 0
      app/src/main/java/com/example/zhpan/circleviewpager/adapter/ArticleAdapter.kt
  17. 0 60
      app/src/main/java/com/example/zhpan/circleviewpager/bean/ArticleWrapper.java
  18. 18 0
      app/src/main/java/com/example/zhpan/circleviewpager/bean/ArticleWrapper.kt
  19. 0 37
      app/src/main/java/com/example/zhpan/circleviewpager/bean/CustomBean.java
  20. 10 0
      app/src/main/java/com/example/zhpan/circleviewpager/bean/CustomBean.kt
  21. 0 21
      app/src/main/java/com/example/zhpan/circleviewpager/bean/DataBean.java
  22. 0 26
      app/src/main/java/com/example/zhpan/circleviewpager/bean/DataWrapper.java
  23. 5 0
      app/src/main/java/com/example/zhpan/circleviewpager/bean/DataWrapper.kt
  24. 0 84
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java
  25. 65 0
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.kt
  26. 6 20
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java
  27. 16 25
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java
  28. 7 28
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java
  29. 2 2
      app/src/main/java/com/example/zhpan/circleviewpager/net/ApiService.java
  30. 0 30
      app/src/main/java/com/example/zhpan/circleviewpager/view/CornerImageView.java
  31. 19 0
      app/src/main/java/com/example/zhpan/circleviewpager/view/CornerImageView.kt
  32. 1 1
      app/src/main/res/layout/activity_page_style.xml
  33. 1 1
      app/src/main/res/layout/activity_welcome.xml
  34. 1 1
      app/src/main/res/layout/fragment_find.xml
  35. 1 0
      app/src/main/res/layout/fragment_others.xml
  36. 32 44
      bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
  37. 1 1
      bannerview/src/main/java/com/zhpan/bannerview/adapter/BannerPagerAdapter.java
  38. 0 1
      bannerview/src/main/java/com/zhpan/bannerview/annotation/Visibility.java
  39. 2 2
      bannerview/src/main/java/com/zhpan/bannerview/constants/IndicatorGravity.java
  40. 1 1
      bannerview/src/main/java/com/zhpan/bannerview/constants/IndicatorSlideMode.java
  41. 1 1
      bannerview/src/main/java/com/zhpan/bannerview/constants/IndicatorStyle.java
  42. 3 3
      bannerview/src/main/java/com/zhpan/bannerview/constants/PageStyle.java
  43. 4 4
      bannerview/src/main/java/com/zhpan/bannerview/constants/TransformerStyle.java
  44. 3 3
      bannerview/src/main/java/com/zhpan/bannerview/holder/ViewHolder.java
  45. 0 48
      bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java
  46. 5 16
      bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java
  47. 3 30
      bannerview/src/main/java/com/zhpan/bannerview/indicator/DashIndicatorView.java
  48. 1 12
      bannerview/src/main/java/com/zhpan/bannerview/indicator/IIndicator.java
  49. 0 19
      bannerview/src/main/java/com/zhpan/bannerview/indicator/IndicatorFactory.java
  50. 56 0
      bannerview/src/main/java/com/zhpan/bannerview/indicator/IndicatorView.java
  51. 48 0
      bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/BaseDrawer.java
  52. 61 0
      bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/CircleDrawer.java
  53. 98 0
      bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/DashDrawer.java
  54. 48 0
      bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/DrawerProxy.java
  55. 18 0
      bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/IDrawer.java
  56. 1 1
      bannerview/src/main/java/com/zhpan/bannerview/manager/AttributeController.java
  57. 6 5
      bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java
  58. 12 2
      bannerview/src/main/java/com/zhpan/bannerview/manager/IndicatorOptions.java
  59. 0 3
      bannerview/src/main/java/com/zhpan/bannerview/provider/BannerScroller.java
  60. 0 3
      bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/BasePageTransformer.java
  61. 0 3
      bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/NonPageTransformer.java
  62. 0 13
      bannerview/src/main/java/com/zhpan/bannerview/utils/BannerUtils.java
  63. 2 0
      bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java
  64. 2 0
      build.gradle
  65. 二进制
      download/app.apk

+ 12 - 0
.github/FUNDING.yml

@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

+ 1 - 2
.gitignore

@@ -1,8 +1,7 @@
 *.iml
 .gradle
 /local.properties
-/.idea/workspace.xml
-/.idea/libraries
+.idea
 .DS_Store
 /build
 /captures

+ 29 - 3
README.md

@@ -205,6 +205,31 @@ public class NetViewHolder implements ViewHolder<BannerData> {
 
 ### 5.BannerViewPager参数配置
 
+Kotlin示例:
+
+```
+    private lateinit var mViewPager: BannerViewPager<CustomBean, CustomPageViewHolder>
+    
+    private fun initViewPager() {
+            mBannerViewPager = findViewById(R.id.bannerView)
+            mBannerViewPager.setCanLoop(false)
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                .setIndicatorMargin(0, 0, 0, ConvertUtils.dp2px(40f))
+                .setIndicatorGravity(IndicatorGravity.CENTER)
+                .setHolderCreator { CustomPageViewHolder() }
+                .setOnPageChangeListener(
+                    object : OnPageChangeListenerAdapter() {
+                        override fun onPageSelected(position: Int) {
+                            pageSelect(position)
+                        }
+                    }
+                )
+                .create(res.toList())
+        }
+```    
+
+Java示例:
+
 ```
     private BannerViewPager<BannerData, NetViewHolder> mBannerViewPager;
     ...
@@ -228,7 +253,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
 ```
 ### 6.开启与停止轮播
 
-***2.5.0之后版本无需自行在Activity或Fragment中管理stopLoop和startLoop方法,但这两个方法依旧保留对外开***
+***2.5.0之后版本无需自行在Activity或Fragment中管理stopLoop和startLoop方法,但这两个方法依旧保留对外开***
 
 ~~如果开启了自动轮播功能,请务必在onDestroy中停止轮播,以免出现内存泄漏。~~
 
@@ -355,9 +380,10 @@ public class FigureIndicatorView extends BaseIndicatorView {
  - [x] 增添更多Indicator样式(2.3.+)
  - [x] 支持一屏显示多页 (2.4.0)
  - [x] v2.4.3版本着重优化提升性能
- - [ ] v2.5.0优化整理Indicator,尽量修复Indicator SMOOTH模式下滑动问题
+ - [x] 重构Indicator,~~尽量修复Indicator SMOOTH模式下滑动问题~~
+ - [x] 目前Indicator部分代码比较乱,还有很大很大的优化空间,后续版本将持续优化(2.5.0对Indicator再次进行了重构,重构后代码已经很整洁,但仍然有优化空间)
  - [ ] ViewPager更换为ViewPager2 (3.0.0)
- - [ ] 目前Indicator部分代码比较乱,还有很大很大的优化空间,后续版本将持续优化
+
  
 
 

+ 5 - 3
app/build.gradle

@@ -1,5 +1,6 @@
 apply plugin: 'com.android.application'
-
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
 android {
     compileSdkVersion 27
     buildToolsVersion '28.0.3'
@@ -45,9 +46,9 @@ dependencies {
     implementation "com.android.support:appcompat-v7:${rootProject.supportLibVersion}"
     implementation "com.android.support:recyclerview-v7:${rootProject.supportLibVersion}"
     testImplementation 'junit:junit:4.12'
-    implementation 'com.github.bumptech.glide:glide:4.0.0'
+    implementation 'com.github.bumptech.glide:glide:4.9.0'
     implementation 'com.github.chrisbanes:PhotoView:2.1.0'
-//    implementation 'com.zhpan.library:bannerview:2.1.1'
+//    implementation 'com.github.zhpanvip:BannerViewPager:2.5.0'
     implementation project(path: ':bannerview')
     implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
     implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0'
@@ -57,4 +58,5 @@ dependencies {
 //        exclude module: 'appcompat-v7'
 //    }
 //    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
+//    implementation 'androidx.core:core-ktx:1.1.0'
 }

+ 0 - 26
app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.java

@@ -1,26 +0,0 @@
-package com.example.zhpan.circleviewpager.activity;
-
-
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class BaseDataActivity extends AppCompatActivity {
-
-    protected List<Integer> mDrawableList = new ArrayList<>();
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        initData();
-    }
-
-    private void initData() {
-        for (int i = 0; i <= 2; i++) {
-            int drawable = getResources().getIdentifier("guide" + i, "drawable", getPackageName());
-            mDrawableList.add(drawable);
-        }
-    }
-}

+ 24 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.kt

@@ -0,0 +1,24 @@
+package com.example.zhpan.circleviewpager.activity
+
+
+import android.os.Bundle
+import android.support.v7.app.AppCompatActivity
+
+import java.util.ArrayList
+
+abstract class BaseDataActivity : AppCompatActivity() {
+
+    protected var mDrawableList: MutableList<Int> = ArrayList()
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        initData()
+    }
+
+    private fun initData() {
+        for (i in 0..2) {
+            val drawable = resources.getIdentifier("guide$i", "drawable", packageName)
+            mDrawableList.add(drawable)
+        }
+    }
+}

+ 0 - 88
app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java

@@ -1,88 +0,0 @@
-package com.example.zhpan.circleviewpager.activity;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-
-
-import android.support.v4.view.ViewPager;
-import android.support.v7.app.AppCompatActivity;
-import android.widget.RadioGroup;
-
-import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.adapter.AdapterFragmentPager;
-import com.zhpan.bannerview.view.CatchViewPager;
-
-
-public class MainActivity extends AppCompatActivity {
-
-    RadioGroup rgTab;
-    CatchViewPager mViewPager;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
-        rgTab = findViewById(R.id.rg_tab);
-        mViewPager = findViewById(R.id.vp_fragment);
-        initData();
-        setListener();
-    }
-
-    private void initData() {
-        AdapterFragmentPager mAdapter = new AdapterFragmentPager(getSupportFragmentManager());
-        mViewPager.setAdapter(mAdapter);
-        mViewPager.disableTouchScroll(true);
-        mViewPager.setOffscreenPageLimit(2);
-        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
-            @Override
-            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-
-            }
-
-            @Override
-            public void onPageSelected(int position) {
-                rgTab.check(getCheckedId(position));
-            }
-
-            @Override
-            public void onPageScrollStateChanged(int state) {
-
-            }
-        });
-    }
-
-    private int getCheckedId(int position) {
-        int checkedId = R.id.rb_home;
-        switch (position) {
-            case 0:
-                checkedId = R.id.rb_home;
-                break;
-            case 1:
-                checkedId = R.id.rb_find;
-                break;
-            case 2:
-                checkedId = R.id.rb_add;
-                break;
-        }
-        return checkedId;
-    }
-
-    private void setListener() {
-        rgTab.setOnCheckedChangeListener((group, checkedId) -> {
-            if (checkedId == R.id.rb_home) {
-                mViewPager.setCurrentItem(AdapterFragmentPager.PAGE_HOME, false);
-
-            } else if (checkedId == R.id.rb_find) {
-                mViewPager.setCurrentItem(AdapterFragmentPager.PAGE_FIND, false);
-
-            } else if (checkedId == R.id.rb_add) {
-                mViewPager.setCurrentItem(AdapterFragmentPager.PAGE_OTHERS, false);
-            }
-        });
-    }
-
-    public static void start(Context context) {
-        context.startActivity(new Intent(context, MainActivity.class));
-    }
-}

+ 74 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.kt

@@ -0,0 +1,74 @@
+package com.example.zhpan.circleviewpager.activity
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.support.v4.view.ViewPager
+import android.support.v7.app.AppCompatActivity
+
+
+import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.adapter.AdapterFragmentPager
+
+import kotlinx.android.synthetic.main.activity_main.*
+
+
+class MainActivity : AppCompatActivity() {
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_main)
+        initData()
+        setListener()
+    }
+
+    private fun initData() {
+        val mAdapter = AdapterFragmentPager(supportFragmentManager)
+        vp_fragment?.adapter = mAdapter
+        vp_fragment?.disableTouchScroll(true)
+        vp_fragment?.offscreenPageLimit = 2
+        vp_fragment?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
+
+            }
+
+            override fun onPageSelected(position: Int) {
+                rg_tab?.check(getCheckedId(position))
+            }
+
+            override fun onPageScrollStateChanged(state: Int) {
+
+            }
+        })
+    }
+
+    private fun getCheckedId(position: Int): Int {
+        var checkedId = R.id.rb_home
+        when (position) {
+            0 -> checkedId = R.id.rb_home
+            1 -> checkedId = R.id.rb_find
+            2 -> checkedId = R.id.rb_add
+        }
+        return checkedId
+    }
+
+    private fun setListener() {
+        rg_tab?.setOnCheckedChangeListener { group, checkedId ->
+            if (checkedId == R.id.rb_home) {
+                vp_fragment?.setCurrentItem(AdapterFragmentPager.PAGE_HOME, false)
+
+            } else if (checkedId == R.id.rb_find) {
+                vp_fragment?.setCurrentItem(AdapterFragmentPager.PAGE_FIND, false)
+
+            } else if (checkedId == R.id.rb_add) {
+                vp_fragment?.setCurrentItem(AdapterFragmentPager.PAGE_OTHERS, false)
+            }
+        }
+    }
+
+    companion object {
+        fun start(context: Context) {
+            context.startActivity(Intent(context, MainActivity::class.java))
+        }
+    }
+}

+ 0 - 30
app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.java

@@ -1,30 +0,0 @@
-package com.example.zhpan.circleviewpager.activity;
-
-
-import android.os.Bundle;
-
-import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.viewholder.PhotoViewHolder;
-import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.constants.IndicatorSlideMode;
-
-public class PhotoViewActivity extends BaseDataActivity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_banner_photo_view);
-        setTitle(R.string.wrapper_photo_view);
-        initViewPager();
-    }
-
-    private void initViewPager() {
-        BannerViewPager<Integer, PhotoViewHolder> bannerViewPager = findViewById(R.id.viewpager);
-        bannerViewPager.setAutoPlay(false)
-                .setCanLoop(false)
-                .setHolderCreator(PhotoViewHolder::new)
-                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
-                .create(mDrawableList);
-        bannerViewPager.setCurrentItem(1);
-    }
-}

+ 30 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.kt

@@ -0,0 +1,30 @@
+package com.example.zhpan.circleviewpager.activity
+
+
+import android.os.Bundle
+
+import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.viewholder.PhotoViewHolder
+import com.zhpan.bannerview.BannerViewPager
+import com.zhpan.bannerview.constants.IndicatorSlideMode
+import com.zhpan.bannerview.holder.HolderCreator
+
+class PhotoViewActivity : BaseDataActivity() {
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_banner_photo_view)
+        setTitle(R.string.wrapper_photo_view)
+        initViewPager()
+    }
+
+    private fun initViewPager() {
+        val bannerViewPager = findViewById<BannerViewPager<Int, PhotoViewHolder>>(R.id.viewpager)
+        bannerViewPager.setAutoPlay(false)
+                .setCanLoop(false)
+                .setHolderCreator { PhotoViewHolder() }
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                .create(mDrawableList)
+        bannerViewPager.currentItem = 1
+    }
+}

+ 0 - 118
app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java

@@ -1,118 +0,0 @@
-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.TextView;
-import android.widget.Toast;
-
-import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.bean.CustomBean;
-import com.example.zhpan.circleviewpager.viewholder.CustomPageViewHolder;
-import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.adapter.OnPageChangeListenerAdapter;
-import com.zhpan.bannerview.constants.IndicatorSlideMode;
-import com.zhpan.bannerview.constants.TransformerStyle;
-import com.zhpan.bannerview.holder.HolderCreator;
-import com.zhpan.bannerview.utils.BannerUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-
-public class WelcomeActivity extends BaseDataActivity implements
-        HolderCreator<CustomPageViewHolder> {
-
-    private BannerViewPager<CustomBean, CustomPageViewHolder> mViewPager;
-
-    private String[] des = {"在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人"};
-
-    private int[] transforms = {TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.STACK, TransformerStyle.DEPTH, TransformerStyle.ROTATE};
-
-    TextView mTvStart;
-
-    TextView mTvDescription;
-
-    private static final int ANIMATION_DURATION = 1300;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_welcome);
-        mTvStart = findViewById(R.id.btn_start);
-        mTvDescription = findViewById(R.id.tv_describe);
-        setupViewPager();
-        updateUI(0);
-    }
-
-    private void setupViewPager() {
-        mViewPager = findViewById(R.id.viewpager);
-        mViewPager.setAutoPlay(false)
-                .setCanLoop(false)
-                .setPageTransformerStyle(transforms[new Random().nextInt(5)])
-                .setScrollDuration(ANIMATION_DURATION)
-                .setIndicatorMargin(0, 0, 0, BannerUtils.dp2px(100))
-                .setIndicatorGap((int) getResources().getDimension(R.dimen.dp_10))
-                .setIndicatorColor(getResources().getColor(R.color.white),
-                        getResources().getColor(R.color.white_alpha_75))
-                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
-                .setIndicatorRadius((int) getResources().getDimension(R.dimen.dp_3), (int) getResources().getDimension(R.dimen.dp_4_5))
-                .setOnPageChangeListener(new OnPageChangeListenerAdapter() {
-                    @Override
-                    public void onPageSelected(int position) {
-                        updateUI(position);
-                    }
-                })
-                .setHolderCreator(this)
-                .create(getData());
-    }
-
-    public void onClick(View view) {
-        MainActivity.start(WelcomeActivity.this);
-        finish();
-    }
-
-    private void updateUI(int position) {
-        mTvDescription.setText(des[position]);
-        ObjectAnimator translationAnim = ObjectAnimator.ofFloat(mTvDescription, "translationX", -120, 0);
-        translationAnim.setDuration(ANIMATION_DURATION);
-        translationAnim.setInterpolator(new DecelerateInterpolator());
-        ObjectAnimator alphaAnimator1 = ObjectAnimator.ofFloat(mTvDescription, "alpha", 0, 1);
-        alphaAnimator1.setDuration(ANIMATION_DURATION);
-        AnimatorSet animatorSet = new AnimatorSet();
-        animatorSet.playTogether(translationAnim, alphaAnimator1);
-        animatorSet.start();
-
-        if (position == mViewPager.getList().size() - 1 && mTvStart.getVisibility() == View.GONE) {
-            mTvStart.setVisibility(View.VISIBLE);
-            ObjectAnimator
-                    .ofFloat(mTvStart, "alpha", 0, 1)
-                    .setDuration(ANIMATION_DURATION).start();
-        } else {
-            mTvStart.setVisibility(View.GONE);
-        }
-    }
-
-    private List<CustomBean> getData() {
-        List<CustomBean> list = new ArrayList<>();
-        for (int i = 0; i < mDrawableList.size(); i++) {
-            CustomBean customBean = new CustomBean();
-            customBean.setImageRes(mDrawableList.get(i));
-            customBean.setImageDescription(des[i]);
-            list.add(customBean);
-        }
-        return list;
-    }
-
-    @Override
-    public CustomPageViewHolder createViewHolder() {
-        CustomPageViewHolder customPageViewHolder = new CustomPageViewHolder();
-        customPageViewHolder.setOnSubViewClickListener((view, position) ->
-                Toast.makeText(WelcomeActivity.this, "Logo Clicked,Item: " + position, Toast.LENGTH_SHORT).show());
-        return customPageViewHolder;
-    }
-}

+ 111 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.kt

@@ -0,0 +1,111 @@
+package com.example.zhpan.circleviewpager.activity
+
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.os.Bundle
+import android.support.v4.content.ContextCompat
+import android.view.View
+import android.view.animation.DecelerateInterpolator
+import android.widget.Toast
+
+import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.bean.CustomBean
+import com.example.zhpan.circleviewpager.viewholder.CustomPageViewHolder
+import com.zhpan.bannerview.BannerViewPager
+import com.zhpan.bannerview.adapter.OnPageChangeListenerAdapter
+import com.zhpan.bannerview.constants.IndicatorSlideMode
+import com.zhpan.bannerview.constants.TransformerStyle
+import com.zhpan.bannerview.holder.HolderCreator
+import com.zhpan.bannerview.utils.BannerUtils
+
+import java.util.ArrayList
+import java.util.Random
+
+import kotlinx.android.synthetic.main.activity_welcome.*
+
+class WelcomeActivity : BaseDataActivity(), HolderCreator<CustomPageViewHolder> {
+
+    private lateinit var mViewPager: BannerViewPager<CustomBean, CustomPageViewHolder>
+
+    private val des = arrayOf("在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人")
+
+    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.STACK, TransformerStyle.DEPTH, TransformerStyle.ROTATE)
+
+    private val data: List<CustomBean>
+        get() {
+            val list = ArrayList<CustomBean>()
+            for (i in mDrawableList.indices) {
+                val customBean = CustomBean()
+                customBean.imageRes = mDrawableList[i]
+                customBean.imageDescription = des[i]
+                list.add(customBean)
+            }
+            return list
+        }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_welcome)
+        setupViewPager()
+        updateUI(0)
+    }
+
+    private fun setupViewPager() {
+        mViewPager = findViewById(R.id.viewpager)
+        mViewPager.setAutoPlay(false)
+                .setCanLoop(false)
+                .setPageTransformerStyle(transforms[Random().nextInt(5)])
+                .setScrollDuration(ANIMATION_DURATION)
+                .setIndicatorMargin(0, 0, 0, BannerUtils.dp2px(100f))
+                .setIndicatorGap(resources.getDimension(R.dimen.dp_10).toInt())
+                .setIndicatorColor(ContextCompat.getColor(this, R.color.white),
+                        ContextCompat.getColor(this, R.color.white_alpha_75))
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
+                .setIndicatorRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
+                .setOnPageChangeListener(object : OnPageChangeListenerAdapter() {
+                    override fun onPageSelected(position: Int) {
+                        updateUI(position)
+                    }
+                })
+                .setHolderCreator(this)
+                .create(data)
+    }
+
+    fun onClick(view: View) {
+        MainActivity.start(this)
+        finish()
+    }
+
+    private fun updateUI(position: Int) {
+        tv_describe?.text = des[position]
+        val translationAnim = ObjectAnimator.ofFloat(tv_describe, "translationX", -120f, 0f)
+        translationAnim.duration = ANIMATION_DURATION.toLong()
+        translationAnim.interpolator = DecelerateInterpolator()
+        val alphaAnimator1 = ObjectAnimator.ofFloat(tv_describe, "alpha", 0f, 1f)
+        alphaAnimator1.duration = ANIMATION_DURATION.toLong()
+        val animatorSet = AnimatorSet()
+        animatorSet.playTogether(translationAnim, alphaAnimator1)
+        animatorSet.start()
+
+        if (position == mViewPager.list.size - 1 && btn_start?.visibility == View.GONE) {
+            btn_start?.visibility = View.VISIBLE
+            ObjectAnimator
+                    .ofFloat(btn_start, "alpha", 0f, 1f)
+                    .setDuration(ANIMATION_DURATION.toLong()).start()
+        } else {
+            btn_start?.visibility = View.GONE
+        }
+    }
+
+    override fun createViewHolder(): CustomPageViewHolder {
+        val customPageViewHolder = CustomPageViewHolder()
+        customPageViewHolder.setOnSubViewClickListener { _, position -> Toast.makeText(this, "Logo Clicked,Item: $position", Toast.LENGTH_SHORT).show() }
+        return customPageViewHolder
+    }
+
+    companion object {
+
+        private const val ANIMATION_DURATION = 1300
+    }
+}

+ 0 - 62
app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java

@@ -1,62 +0,0 @@
-package com.example.zhpan.circleviewpager.adapter;
-
-import android.support.annotation.NonNull;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-import android.util.SparseArray;
-import android.view.ViewGroup;
-
-
-
-import com.example.zhpan.circleviewpager.fragment.BaseFragment;
-import com.example.zhpan.circleviewpager.fragment.IndicatorFragment;
-import com.example.zhpan.circleviewpager.fragment.PageFragment;
-import com.example.zhpan.circleviewpager.fragment.HomeFragment;
-
-public class AdapterFragmentPager extends FragmentPagerAdapter {
-
-    public static final int PAGE_HOME = 0;
-
-    public static final int PAGE_FIND = 1;
-
-    public static final int PAGE_OTHERS = 2;
-
-    private SparseArray<BaseFragment> fragmentList;
-
-    public AdapterFragmentPager(FragmentManager fm) {
-        super(fm);
-        fragmentList = getFragments();
-    }
-
-    private SparseArray<BaseFragment> getFragments() {
-        SparseArray<BaseFragment> fragmentList = new SparseArray<>();
-        fragmentList.put(PAGE_HOME, HomeFragment.getInstance());
-        fragmentList.put(PAGE_FIND, PageFragment.getInstance());
-        fragmentList.put(PAGE_OTHERS, IndicatorFragment.getInstance());
-        return fragmentList;
-    }
-
-    @NonNull
-    @Override
-    public Object instantiateItem(@NonNull ViewGroup container, int position) {
-        Fragment fragment = (Fragment) super.instantiateItem(container, position);
-        fragmentList.put(position, (BaseFragment) fragment);
-        return fragment;
-    }
-
-    @Override
-    public Fragment getItem(int position) {
-        return fragmentList.get(position);
-    }
-
-    @Override
-    public int getCount() {
-        if (fragmentList != null) {
-            return fragmentList.size();
-        } else {
-            return 0;
-        }
-    }
-
-}

+ 55 - 0
app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.kt

@@ -0,0 +1,55 @@
+package com.example.zhpan.circleviewpager.adapter
+
+import android.support.v4.app.Fragment
+import android.support.v4.app.FragmentManager
+import android.support.v4.app.FragmentPagerAdapter
+import android.util.SparseArray
+import android.view.ViewGroup
+
+
+import com.example.zhpan.circleviewpager.fragment.BaseFragment
+import com.example.zhpan.circleviewpager.fragment.IndicatorFragment
+import com.example.zhpan.circleviewpager.fragment.PageFragment
+import com.example.zhpan.circleviewpager.fragment.HomeFragment
+
+class AdapterFragmentPager(fm: FragmentManager) : FragmentPagerAdapter(fm) {
+
+    private val fragmentList: SparseArray<BaseFragment>?
+
+    private val fragments: SparseArray<BaseFragment>
+        get() {
+            val fragmentList = SparseArray<BaseFragment>()
+            fragmentList.put(PAGE_HOME, HomeFragment.getInstance())
+            fragmentList.put(PAGE_FIND, PageFragment.getInstance())
+            fragmentList.put(PAGE_OTHERS, IndicatorFragment.getInstance())
+            return fragmentList
+        }
+
+    init {
+        fragmentList = fragments
+    }
+
+    override fun instantiateItem(container: ViewGroup, position: Int): Any {
+        val fragment = super.instantiateItem(container, position) as Fragment
+        fragmentList!!.put(position, fragment as BaseFragment)
+        return fragment
+    }
+
+    override fun getItem(position: Int): Fragment {
+        return fragmentList!!.get(position)
+    }
+
+    override fun getCount(): Int {
+        return fragmentList?.size() ?: 0
+    }
+
+    companion object {
+
+        const val PAGE_HOME = 0
+
+        const val PAGE_FIND = 1
+
+        const val PAGE_OTHERS = 2
+    }
+
+}

+ 0 - 66
app/src/main/java/com/example/zhpan/circleviewpager/adapter/ArticleAdapter.java

@@ -1,66 +0,0 @@
-package com.example.zhpan.circleviewpager.adapter;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.bean.ArticleWrapper;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ArticleViewHolder> {
-    private List<ArticleWrapper.Article> mList = new ArrayList<>();
-    private LayoutInflater inflater;
-
-    public ArticleAdapter(Context context, List<ArticleWrapper.Article> data) {
-        this.mList.addAll(data);
-        this.inflater = LayoutInflater.from(context);
-    }
-
-    @NonNull
-    @Override
-    public ArticleViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
-        return new ArticleViewHolder(inflater.inflate(R.layout.item_article, viewGroup, false));
-    }
-
-    @Override
-    public void onBindViewHolder(@NonNull ArticleViewHolder holder, int i) {
-        ArticleWrapper.Article article = mList.get(i);
-        holder.tvAuthor.setText(article.getAuthor());
-        holder.tvTitle.setText(article.getTitle());
-    }
-
-    public void setData(List<ArticleWrapper.Article> list) {
-        mList.clear();
-        mList.addAll(list);
-        notifyDataSetChanged();
-    }
-
-    public void addData(List<ArticleWrapper.Article> list) {
-        mList.addAll(list);
-        notifyDataSetChanged();
-    }
-
-    @Override
-    public int getItemCount() {
-        return mList.size();
-    }
-
-    public class ArticleViewHolder extends RecyclerView.ViewHolder {
-        TextView tvTitle;
-        TextView tvAuthor;
-
-        public ArticleViewHolder(@NonNull View itemView) {
-            super(itemView);
-            tvTitle = itemView.findViewById(R.id.tv_title);
-            tvAuthor = itemView.findViewById(R.id.tv_auther);
-        }
-    }
-
-}

+ 50 - 0
app/src/main/java/com/example/zhpan/circleviewpager/adapter/ArticleAdapter.kt

@@ -0,0 +1,50 @@
+package com.example.zhpan.circleviewpager.adapter
+
+import android.content.Context
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+
+import com.example.zhpan.circleviewpager.R
+import com.example.zhpan.circleviewpager.bean.ArticleWrapper
+
+import java.util.ArrayList
+
+class ArticleAdapter(context: Context, data: List<ArticleWrapper.Article>) : RecyclerView.Adapter<ArticleAdapter.ArticleViewHolder>() {
+    private val mList = ArrayList<ArticleWrapper.Article>()
+    private val inflater: LayoutInflater
+
+    init {
+        this.mList.addAll(data)
+        this.inflater = LayoutInflater.from(context)
+    }
+
+    override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ArticleViewHolder {
+        return ArticleViewHolder(inflater.inflate(R.layout.item_article, viewGroup, false))
+    }
+
+    override fun onBindViewHolder(holder: ArticleViewHolder, i: Int) {
+        val article = mList[i]
+        holder.tvAuthor.text = article.author
+        holder.tvTitle.text = article.title
+    }
+
+    fun setData(list: List<ArticleWrapper.Article>) {
+        mList.clear()
+        mList.addAll(list)
+        notifyDataSetChanged()
+    }
+
+    override fun getItemCount(): Int {
+        return mList.size
+    }
+
+    inner class ArticleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+        internal var tvTitle: TextView = itemView.findViewById(R.id.tv_title)
+        internal var tvAuthor: TextView = itemView.findViewById(R.id.tv_auther)
+
+    }
+
+}

+ 0 - 60
app/src/main/java/com/example/zhpan/circleviewpager/bean/ArticleWrapper.java

@@ -1,60 +0,0 @@
-package com.example.zhpan.circleviewpager.bean;
-
-import java.util.List;
-
-public class ArticleWrapper {
-
-    private List<Article> datas;
-
-    public List<Article> getDatas() {
-        return datas;
-    }
-
-    public void setDatas(List<Article> datas) {
-        this.datas = datas;
-    }
-
-    public static class Article {
-        private String title;
-
-        private String link;
-
-        private String author;
-
-        private long publishTime;
-
-        public String getTitle() {
-            return title;
-        }
-
-        public void setTitle(String title) {
-            this.title = title;
-        }
-
-        public String getLink() {
-            return link;
-        }
-
-        public void setLink(String link) {
-            this.link = link;
-        }
-
-        public String getAuthor() {
-            return author;
-        }
-
-        public void setAuthor(String author) {
-            this.author = author;
-        }
-
-        public long getPublishTime() {
-            return publishTime;
-        }
-
-        public void setPublishTime(long publishTime) {
-            this.publishTime = publishTime;
-        }
-    }
-
-
-}

+ 18 - 0
app/src/main/java/com/example/zhpan/circleviewpager/bean/ArticleWrapper.kt

@@ -0,0 +1,18 @@
+package com.example.zhpan.circleviewpager.bean
+
+class ArticleWrapper {
+
+    var datas: List<Article>? = null
+
+    class Article {
+        var title: String? = null
+
+        var link: String? = null
+
+        var author: String? = null
+
+        var publishTime: Long = 0
+    }
+
+
+}

+ 0 - 37
app/src/main/java/com/example/zhpan/circleviewpager/bean/CustomBean.java

@@ -1,37 +0,0 @@
-package com.example.zhpan.circleviewpager.bean;
-
-
-import android.support.annotation.DrawableRes;
-
-public class CustomBean {
-
-    private int imageRes;
-
-    private String imageDescription;
-
-    private String imgUrl;
-
-    public String getImgUrl() {
-        return imgUrl;
-    }
-
-    public void setImgUrl(String imgUrl) {
-        this.imgUrl = imgUrl;
-    }
-
-    public int getImageRes() {
-        return imageRes;
-    }
-
-    public void setImageRes(@DrawableRes int imageRes) {
-        this.imageRes = imageRes;
-    }
-
-    public String getImageDescription() {
-        return imageDescription;
-    }
-
-    public void setImageDescription(String imageDescription) {
-        this.imageDescription = imageDescription;
-    }
-}

+ 10 - 0
app/src/main/java/com/example/zhpan/circleviewpager/bean/CustomBean.kt

@@ -0,0 +1,10 @@
+package com.example.zhpan.circleviewpager.bean
+
+class CustomBean {
+
+    var imageRes: Int = 0
+
+    var imageDescription: String? = null
+
+    var imgUrl: String? = null
+}

+ 0 - 21
app/src/main/java/com/example/zhpan/circleviewpager/bean/DataBean.java

@@ -1,21 +0,0 @@
-package com.example.zhpan.circleviewpager.bean;
-
-/**
- * Created by zhpan on 2017/11/1.
- * Description:
- */
-
-public class DataBean {
-    private String url;
-
-    public DataBean(String url) {
-        this.url = url;
-    }
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-}

+ 0 - 26
app/src/main/java/com/example/zhpan/circleviewpager/bean/DataWrapper.java

@@ -1,26 +0,0 @@
-package com.example.zhpan.circleviewpager.bean;
-
-import com.example.zhpan.circleviewpager.net.BannerData;
-
-import java.util.List;
-
-public class DataWrapper {
-
-    private List<ArticleWrapper.Article> articleList;
-
-    private List<BannerData> dataBeanList;
-
-    public DataWrapper(List<ArticleWrapper.Article> articleList, List<BannerData> dataBeanList) {
-        this.articleList = articleList;
-        this.dataBeanList = dataBeanList;
-    }
-
-    public List<BannerData> getDataBeanList() {
-        return dataBeanList;
-    }
-
-    public List<ArticleWrapper.Article> getArticleList() {
-        return articleList;
-    }
-
-}

+ 5 - 0
app/src/main/java/com/example/zhpan/circleviewpager/bean/DataWrapper.kt

@@ -0,0 +1,5 @@
+package com.example.zhpan.circleviewpager.bean
+
+import com.example.zhpan.circleviewpager.net.BannerData
+
+class DataWrapper(val articleList: List<ArticleWrapper.Article>, val dataBeanList: List<BannerData>)

+ 0 - 84
app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java

@@ -1,84 +0,0 @@
-package com.example.zhpan.circleviewpager.fragment;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-
-import com.trello.rxlifecycle2.components.support.RxFragment;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * MVC模式的Base fragment
- */
-public abstract class BaseFragment extends RxFragment {
-    protected List<Integer> mDrawableList = new ArrayList<>();
-    protected Context mContext;
-
-    @Override
-    public void onAttach(@NonNull Context context) {
-        super.onAttach(context);
-        this.mContext = context.getApplicationContext();
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        View view = inflater.inflate(getLayout(), container, false);
-        initData();
-        initTitle();
-        initView(savedInstanceState, view);
-        return view;
-    }
-
-    @Override
-    public void onDestroyView() {
-        super.onDestroyView();
-
-    }
-
-    private void initData() {
-        for (int i = 0; i < 4; i++) {
-            int drawable = getResources().getIdentifier("t" + i, "drawable", mContext.getPackageName());
-            mDrawableList.add(drawable);
-        }
-    }
-
-    protected @ColorInt
-    int getColor(@ColorRes int colorRes) {
-        return getContext().getResources().getColor(colorRes);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-    }
-
-
-    /**
-     * 获取当前Activity的UI布局
-     *
-     * @return 布局id
-     */
-    protected abstract int getLayout();
-
-    /**
-     * 初始化标题
-     */
-    protected abstract void initTitle();
-
-    /**
-     * 初始化数据
-     */
-    protected abstract void initView(Bundle savedInstanceState, View view);
-
-}

+ 65 - 0
app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.kt

@@ -0,0 +1,65 @@
+package com.example.zhpan.circleviewpager.fragment
+
+import android.content.Context
+import android.os.Bundle
+import android.support.annotation.ColorInt
+import android.support.annotation.ColorRes
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+
+import com.trello.rxlifecycle2.components.support.RxFragment
+
+import java.util.ArrayList
+
+/**
+ * MVC模式的Base fragment
+ */
+abstract class BaseFragment : RxFragment() {
+    protected var mDrawableList: MutableList<Int> = ArrayList()
+    protected lateinit var mContext: Context
+
+    /**
+     * 获取当前Activity的UI布局
+     *
+     * @return 布局id
+     */
+    protected abstract val layout: Int
+
+    override fun onAttach(context: Context) {
+        super.onAttach(context)
+        this.mContext = context.applicationContext
+    }
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        val view = inflater.inflate(layout, container, false)
+        initData()
+        initTitle()
+        initView(savedInstanceState, view)
+        return view
+    }
+
+    private fun initData() {
+        for (i in 0..3) {
+            val drawable = resources.getIdentifier("t$i", "drawable", mContext.packageName)
+            mDrawableList.add(drawable)
+        }
+    }
+
+    @ColorInt
+    protected fun getColor(@ColorRes colorRes: Int): Int {
+        return context!!.resources.getColor(colorRes)
+    }
+
+    /**
+     * 初始化标题
+     */
+    protected abstract fun initTitle()
+
+    /**
+     * 初始化数据
+     */
+    protected abstract fun initView(savedInstanceState: Bundle?, view: View)
+
+}

+ 6 - 20
app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java

@@ -64,17 +64,17 @@ public class HomeFragment extends BaseFragment {
 
     private void initRecyclerView(View view) {
         recyclerView = view.findViewById(R.id.recycler_view);
-        recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
+        recyclerView.setLayoutManager(new LinearLayoutManager(getMContext()));
         recyclerView.addHeadView(getHeaderView());
-        recyclerView.addItemDecoration(new DividerItemDecoration(mContext,
+        recyclerView.addItemDecoration(new DividerItemDecoration(getMContext(),
                 DividerItemDecoration.VERTICAL));
-        articleAdapter = new ArticleAdapter(mContext, new ArrayList<>());
+        articleAdapter = new ArticleAdapter(getMContext(), new ArrayList<>());
         recyclerView.setAdapter(articleAdapter);
     }
 
     private void initRefreshLayout(View view) {
         mSmartRefreshLayout = view.findViewById(R.id.refresh_layout);
-        mSmartRefreshLayout.setRefreshHeader(new MaterialHeader(mContext));
+        mSmartRefreshLayout.setRefreshHeader(new MaterialHeader(getMContext()));
         mSmartRefreshLayout.setOnRefreshListener(refreshLayout -> fetchData(false));
     }
 
@@ -117,29 +117,15 @@ public class HomeFragment extends BaseFragment {
                 .setIndicatorMargin(0,0,0, (int) getResources().getDimension(R.dimen.dp_18))
                 .setOnPageClickListener(position -> {
                     BannerData bannerData = mBannerViewPager.getList().get(position);
-                    Toast.makeText(mContext,
+                    Toast.makeText(getMContext(),
                             "点击了position:" + position + " " + bannerData.getTitle(), Toast.LENGTH_SHORT).show();
 
                 });
     }
 
     private View getHeaderView() {
-        View view = LayoutInflater.from(mContext).inflate(R.layout.item_header_view, recyclerView, false);
+        View view = LayoutInflater.from(getMContext()).inflate(R.layout.item_header_view, recyclerView, false);
         mBannerViewPager = view.findViewById(R.id.banner_view);
         return view;
     }
-
-//    @Override
-//    public void onStop() {
-//        if (mBannerViewPager != null)
-//            mBannerViewPager.stopLoop();
-//        super.onStop();
-//    }
-//
-//    @Override
-//    public void onResume() {
-//        if (mBannerViewPager != null)
-//            mBannerViewPager.startLoop();
-//        super.onResume();
-//    }
 }

+ 16 - 25
app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java

@@ -20,11 +20,11 @@ import com.zhpan.idea.utils.ToastUtils;
 /**
  * Created by zhpan on 2018/7/24.
  */
-public class IndicatorFragment extends BaseFragment {
+public class IndicatorFragment extends BaseFragment implements View.OnClickListener {
 
-    BannerViewPager<Integer, ImageResourceViewHolder> mViewPager;
-    RadioGroup radioGroupStyle;
-    RadioButton radioButton;
+    private BannerViewPager<Integer, ImageResourceViewHolder> mViewPager;
+    private RadioGroup radioGroupStyle;
+    private RadioButton radioButton;
 
     @Override
     protected int getLayout() {
@@ -38,11 +38,12 @@ public class IndicatorFragment extends BaseFragment {
 
     @Override
     protected void initView(Bundle savedInstanceState, View view) {
-        mViewPager = view.findViewById(R.id.banner_view);
-        radioGroupStyle = view.findViewById(R.id.rg_indicator_style);
         radioButton = view.findViewById(R.id.rb_circle);
-        view.findViewById(R.id.tv_photo_view).setOnClickListener(v -> startActivity(new Intent(getActivity(), PhotoViewActivity.class)));
+        radioGroupStyle = view.findViewById(R.id.rg_indicator_style);
+        mViewPager = view.findViewById(R.id.banner_view);
+        view.findViewById(R.id.tv_photo_view).setOnClickListener(this);
         mViewPager.setIndicatorGap(BannerUtils.dp2px(6))
+                .setRoundCorner(BannerUtils.dp2px(6))
                 .setHolderCreator(() -> new ImageResourceViewHolder(0));
         initRadioGroup();
     }
@@ -79,7 +80,7 @@ public class IndicatorFragment extends BaseFragment {
                 .setPageMargin(0)
                 .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                .setIndicatorRadius(BannerUtils.dp2px(4), BannerUtils.dp2px(5)).create(mDrawableList);
+                .setIndicatorRadius(BannerUtils.dp2px(4), BannerUtils.dp2px(5)).create(getMDrawableList());
     }
 
     private void setupDashIndicator() {
@@ -90,7 +91,7 @@ public class IndicatorFragment extends BaseFragment {
                 .setPageMargin(0)
                 .setIndicatorWidth(BannerUtils.dp2px(3), BannerUtils.dp2px(10))
                 .setIndicatorColor(Color.parseColor("#888888"),
-                        Color.parseColor("#118EEA")).create(mDrawableList);
+                        Color.parseColor("#118EEA")).create(getMDrawableList());
     }
 
     private void setupCustomIndicator() {
@@ -98,32 +99,22 @@ public class IndicatorFragment extends BaseFragment {
                 .setPageMargin(BannerUtils.dp2px(20))
                 .setIndicatorGravity(IndicatorGravity.END)
                 .setIndicatorView(setupIndicatorView())
-                .setHolderCreator(() -> new ImageResourceViewHolder(0)).create(mDrawableList);
+                .setHolderCreator(() -> new ImageResourceViewHolder(0)).create(getMDrawableList());
     }
 
     /**
      * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口;
      */
     private FigureIndicatorView setupIndicatorView() {
-        FigureIndicatorView indicatorView = new FigureIndicatorView(mContext);
+        FigureIndicatorView indicatorView = new FigureIndicatorView(getMContext());
         indicatorView.setRadius(BannerUtils.dp2px(18));
         indicatorView.setTextSize(BannerUtils.dp2px(13));
         indicatorView.setBackgroundColor(Color.parseColor("#aa118EEA"));
         return indicatorView;
     }
 
-
-//    @Override
-//    public void onStop() {
-//        if (mViewPager != null)
-//            mViewPager.stopLoop();
-//        super.onStop();
-//    }
-//
-//    @Override
-//    public void onResume() {
-//        super.onResume();
-//        if (mViewPager != null)
-//            mViewPager.startLoop();
-//    }
+    @Override
+    public void onClick(View view) {
+        startActivity(new Intent(getActivity(), PhotoViewActivity.class));
+    }
 }

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

@@ -15,20 +15,19 @@ import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.constants.PageStyle;
-import com.zhpan.bannerview.indicator.CircleIndicatorView;
+import com.zhpan.bannerview.indicator.IndicatorView;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.idea.utils.ToastUtils;
 
-
 /**
  * Created by zhpan on 2018/7/24.
  */
 public class PageFragment extends BaseFragment {
 
-    BannerViewPager<Integer, ImageResourceViewHolder> mViewPager;
-    RadioGroup mRadioGroupPageStyle;
-    CircleIndicatorView indicatorView;
-    RadioButton radioButton;
+    private BannerViewPager<Integer, ImageResourceViewHolder> mViewPager;
+    private RadioGroup mRadioGroupPageStyle;
+    private IndicatorView indicatorView;
+    private RadioButton radioButton;
 
     @Override
     protected int getLayout() {
@@ -56,12 +55,6 @@ public class PageFragment extends BaseFragment {
         initRadioGroup();
     }
 
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        return super.onCreateView(inflater, container, savedInstanceState);
-    }
-
     public static PageFragment getInstance() {
         return new PageFragment();
     }
@@ -70,7 +63,7 @@ public class PageFragment extends BaseFragment {
         mViewPager
                 .setIndicatorVisibility(View.VISIBLE) // 在实际开发中这行代码不必添加,此处因为受到其它两种模式影响所以要隐藏掉内置指示器
                 .setPageStyle(pageStyle)
-                .create(mDrawableList);
+                .create(getMDrawableList());
     }
 
     private void initRadioGroup() {
@@ -101,20 +94,6 @@ public class PageFragment extends BaseFragment {
                 .setIndicatorVisibility(View.GONE) // 在实际开发中这行代码不必添加,此处因为受到其它两种模式影响所以要隐藏掉内置指示器
                 .setPageStyle(PageStyle.MULTI_PAGE_OVERLAP)
                 .setIndicatorView(indicatorView)
-                .create(mDrawableList);
+                .create(getMDrawableList());
     }
-
-//    @Override
-//    public void onStop() {
-//        if (mViewPager != null)
-//            mViewPager.stopLoop();
-//        super.onStop();
-//    }
-//
-//    @Override
-//    public void onResume() {
-//        if (mViewPager != null)
-//            mViewPager.startLoop();
-//        super.onResume();
-//    }
 }

+ 2 - 2
app/src/main/java/com/example/zhpan/circleviewpager/net/ApiService.java

@@ -16,11 +16,11 @@ import retrofit2.http.Headers;
  */
 public interface ApiService {
 
-    @Headers("Cache-Control: public, max-age=" + 24 * 3600)
+    @Headers("Cache-Control: public, max-age=" + 3600)
     @GET("banner/json")
     Observable<List<BannerData>> getBannerData();
 
-    @Headers("Cache-Control: public, max-age=" + 24 * 3600)
+    @Headers("Cache-Control: public, max-age=" + 3600)
     @GET("article/list/0/json")
     Observable<ArticleWrapper> getArticle();
 }

+ 0 - 30
app/src/main/java/com/example/zhpan/circleviewpager/view/CornerImageView.java

@@ -1,30 +0,0 @@
-package com.example.zhpan.circleviewpager.view;
-
-import android.content.Context;
-import android.os.Build;
-import android.support.v7.widget.AppCompatImageView;
-import android.util.AttributeSet;
-
-
-import com.zhpan.bannerview.provider.ViewStyleSetter;
-
-public class CornerImageView extends AppCompatImageView {
-    public CornerImageView(Context context) {
-        this(context, null);
-    }
-
-    public CornerImageView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public CornerImageView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    public void setRoundCorner(int radius) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
-            viewStyleSetter.setRoundCorner(radius);
-        }
-    }
-}

+ 19 - 0
app/src/main/java/com/example/zhpan/circleviewpager/view/CornerImageView.kt

@@ -0,0 +1,19 @@
+package com.example.zhpan.circleviewpager.view
+
+import android.content.Context
+import android.os.Build
+import android.support.v7.widget.AppCompatImageView
+import android.util.AttributeSet
+
+
+import com.zhpan.bannerview.provider.ViewStyleSetter
+
+class CornerImageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatImageView(context, attrs, defStyleAttr) {
+
+    fun setRoundCorner(radius: Int) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            val viewStyleSetter = ViewStyleSetter(this)
+            viewStyleSetter.setRoundCorner(radius.toFloat())
+        }
+    }
+}

+ 1 - 1
app/src/main/res/layout/activity_page_style.xml

@@ -12,7 +12,7 @@
         android:layout_marginTop="20dp"
         app:bvp_page_style="multi_page" />
 
-    <com.zhpan.bannerview.indicator.CircleIndicatorView
+    <com.zhpan.bannerview.indicator.IndicatorView
         android:id="@+id/indicator_view"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

+ 1 - 1
app/src/main/res/layout/activity_welcome.xml

@@ -24,13 +24,13 @@
         android:id="@+id/btn_start"
         android:layout_width="wrap_content"
         android:layout_height="35dp"
-        android:onClick="onClick"
         android:layout_alignParentBottom="true"
         android:layout_centerHorizontal="true"
         android:layout_marginBottom="20dp"
         android:background="@drawable/bg_start"
         android:gravity="center_vertical"
         android:text="@string/start_now"
+        android:onClick="onClick"
         android:textColor="#FFFFFF"
         android:textSize="16sp"
         android:visibility="gone" />

+ 1 - 1
app/src/main/res/layout/fragment_find.xml

@@ -11,7 +11,7 @@
         android:layout_marginTop="20dp"
         app:bvp_page_style="multi_page" />
 
-    <com.zhpan.bannerview.indicator.CircleIndicatorView
+    <com.zhpan.bannerview.indicator.IndicatorView
         android:id="@+id/indicator_view"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

+ 1 - 0
app/src/main/res/layout/fragment_others.xml

@@ -62,6 +62,7 @@
         android:layout_marginTop="20dp"
         android:background="@color/white"
         android:gravity="center"
+        android:onClick="onClick"
         android:text="@string/wrapper_photo_view"
         android:textColor="#000000"
         android:textSize="16sp" />

+ 32 - 44
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -24,8 +24,8 @@ import com.zhpan.bannerview.annotation.Visibility;
 import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.constants.IndicatorStyle;
 import com.zhpan.bannerview.constants.PageStyle;
+import com.zhpan.bannerview.indicator.IndicatorView;
 import com.zhpan.bannerview.indicator.IIndicator;
-import com.zhpan.bannerview.indicator.IndicatorFactory;
 import com.zhpan.bannerview.manager.BannerManager;
 import com.zhpan.bannerview.manager.BannerOptions;
 import com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer;
@@ -71,31 +71,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     private Handler mHandler = new Handler();
 
-    private Runnable mRunnable = new Runnable() {
-        @Override
-        public void run() {
-            if (mList.size() > 1) {
-                currentPosition = mViewPager.getCurrentItem() + 1;
-                if (isCanLoop()) {
-                    if (currentPosition == MAX_VALUE - 1) {
-                        currentPosition = 0;
-                        mViewPager.setCurrentItem(currentPosition, false);
-                        mHandler.post(mRunnable);
-                    } else {
-                        mViewPager.setCurrentItem(currentPosition);
-                        mHandler.postDelayed(mRunnable, getInterval());
-                    }
-                } else {
-                    if (currentPosition >= MAX_VALUE) {
-                        stopLoop();
-                    } else {
-                        mViewPager.setCurrentItem(currentPosition);
-                        mHandler.postDelayed(mRunnable, getInterval());
-                    }
-                }
-            }
-        }
-    };
+    private Runnable mRunnable = this::handlePosition;
 
     public BannerViewPager(Context context) {
         this(context, null);
@@ -135,9 +111,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         startLoop();
     }
 
-    /**
-     * 设置触摸事件,当滑动或者触摸时停止自动轮播
-     */
     @SuppressLint("ClickableViewAccessibility")
     private void setTouchListener() {
         mViewPager.setOnTouchListener((v, event) -> {
@@ -190,6 +163,29 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
                     positionOffset, positionOffsetPixels);
     }
 
+    private void handlePosition() {
+        if (mList.size() > 1) {
+            currentPosition = mViewPager.getCurrentItem() + 1;
+            if (isCanLoop()) {
+                if (currentPosition == MAX_VALUE - 1) {
+                    currentPosition = 0;
+                    mViewPager.setCurrentItem(currentPosition, false);
+                    mHandler.post(mRunnable);
+                } else {
+                    mViewPager.setCurrentItem(currentPosition);
+                    mHandler.postDelayed(mRunnable, getInterval());
+                }
+            } else {
+                if (currentPosition >= MAX_VALUE) {
+                    stopLoop();
+                } else {
+                    mViewPager.setCurrentItem(currentPosition);
+                    mHandler.postDelayed(mRunnable, getInterval());
+                }
+            }
+        }
+    }
+
     private void initBannerData(List<T> list) {
         if (list != null) {
             mList.clear();
@@ -204,13 +200,13 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     }
 
-
     private void setIndicatorValues() {
         BannerOptions bannerOptions = mBannerManager.bannerOptions();
         if (bannerOptions.isCustomIndicator() && null != mIndicatorView) {
             initIndicator(mIndicatorView);
         } else {
-            initIndicator(IndicatorFactory.createIndicatorView(getContext(), bannerOptions.getIndicatorStyle()));
+//            initIndicator(IndicatorFactory.createIndicatorView(getContext(), bannerOptions.getIndicatorStyle()));
+            initIndicator(new IndicatorView(getContext()));
         }
         mIndicatorView.setIndicatorOptions(bannerOptions.getIndicatorOptions());
         mIndicatorView.setPageSize(mList.size());
@@ -310,15 +306,9 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     }
 
     private void setMultiPageStyle(boolean overlap, float scale) {
-        BannerOptions bannerOptions = mBannerManager.bannerOptions();
-        if (bannerOptions.getPageMargin() == 0) {
-            bannerOptions.setPageMargin(BannerUtils.dp2px(20));
-        }
-        if (bannerOptions.getRevealWidth() == 0) {
-            bannerOptions.setRevealWidth(BannerUtils.dp2px(20));
-        }
         setClipChildren(false);
         ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mViewPager.getLayoutParams();
+        BannerOptions bannerOptions = mBannerManager.bannerOptions();
         params.leftMargin = bannerOptions.getPageMargin() + bannerOptions.getRevealWidth();
         params.rightMargin = params.leftMargin;
         mViewPager.setOverlapStyle(overlap);
@@ -484,8 +474,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * @param radius 指示器圆点半径
      */
     public BannerViewPager<T, VH> setIndicatorRadius(int radius) {
-        mBannerManager.bannerOptions().setNormalIndicatorWidth(radius * 2);
-        mBannerManager.bannerOptions().setCheckedIndicatorWidth(radius * 2);
+        setIndicatorRadius(radius, radius);
         return this;
     }
 
@@ -508,8 +497,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * @param indicatorWidth 单个Indicator宽度/直径
      */
     public BannerViewPager<T, VH> setIndicatorWidth(int indicatorWidth) {
-        mBannerManager.bannerOptions().setNormalIndicatorWidth(indicatorWidth);
-        mBannerManager.bannerOptions().setCheckedIndicatorWidth(indicatorWidth);
+        setIndicatorWidth(indicatorWidth, indicatorWidth);
         return this;
     }
 
@@ -716,10 +704,10 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         return this;
     }
 
-    // 仅供demo使用
+    //  仅供demo使用
 //    @Deprecated
 //    public void resetIndicator() {
-//        isCustomIndicator = false;
+//        mBannerManager.bannerOptions().setCustomIndicator(false);
 //        mIndicatorView = null;
 //    }
 }

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

@@ -74,7 +74,7 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
     private View getView(final int position, ViewGroup container) {
         ViewHolder<T> holder = holderCreator.createViewHolder();
         if (holder == null) {
-            throw new NullPointerException("can not return a null holder");
+            throw new NullPointerException("Can not return a null holder");
         }
         return createView(holder, position, container);
     }

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

@@ -9,7 +9,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-
 /**
  * <pre>
  *   Created by zhangpan on 2019-11-12.

+ 2 - 2
bannerview/src/main/java/com/zhpan/bannerview/constants/IndicatorGravity.java

@@ -8,6 +8,6 @@ package com.zhpan.bannerview.constants;
  */
 public interface IndicatorGravity {
     int CENTER = 0;
-    int START = 1;
-    int END = 2;
+    int START = 1 << 1;
+    int END = 1 << 2;
 }

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

@@ -8,5 +8,5 @@ package com.zhpan.bannerview.constants;
  */
 public interface IndicatorSlideMode {
     int NORMAL = 0;
-    int SMOOTH = 1;
+    int SMOOTH = 1 << 1;
 }

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

@@ -8,5 +8,5 @@ package com.zhpan.bannerview.constants;
  */
 public interface IndicatorStyle {
     int CIRCLE = 0;
-    int DASH = 1;
+    int DASH = 1 << 1;
 }

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

@@ -10,9 +10,9 @@ public interface PageStyle {
 
     int NORMAL = 0;
 
-    int MULTI_PAGE = 1;
+    int MULTI_PAGE = 1 << 1;
 
-    int MULTI_PAGE_OVERLAP = 2;
+    int MULTI_PAGE_OVERLAP = 1 << 2;
 
-    int MULTI_PAGE_SCALE = 3;
+    int MULTI_PAGE_SCALE = 1 << 3;
 }

+ 4 - 4
bannerview/src/main/java/com/zhpan/bannerview/constants/TransformerStyle.java

@@ -2,8 +2,8 @@ package com.zhpan.bannerview.constants;
 
 public interface TransformerStyle {
     int NONE = 0;
-    int DEPTH = 1;
-    int STACK = 2;
-    int ACCORDION = 3;
-    int ROTATE = 4;
+    int DEPTH = 1 << 1;
+    int STACK = 1 << 2;
+    int ACCORDION = 1 << 3;
+    int ROTATE = 1 << 4;
 }

+ 3 - 3
bannerview/src/main/java/com/zhpan/bannerview/holder/ViewHolder.java

@@ -10,13 +10,13 @@ import android.view.ViewGroup;
  */
 
 public interface ViewHolder<T> {
-    View createView(ViewGroup viewGroup, Context context, int position);
-   // void onBind(Context context, int position, T data);
+    View createView(ViewGroup viewGroup,Context context, int position);
+
     /**
      * @param context context
      * @param data 实体类对象
      * @param position 当前位置
      * @param size 页面个数
      */
-    void onBind(Context context, T data, int position, int size);
+    void onBind(Context context,T data,int position,int size);
 }

+ 0 - 48
bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java

@@ -6,8 +6,6 @@ import android.support.annotation.Nullable;
 import android.util.AttributeSet;
 import android.view.View;
 
-
-import com.zhpan.bannerview.annotation.AIndicatorSlideMode;
 import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.manager.IndicatorOptions;
 
@@ -92,47 +90,6 @@ public class BaseIndicatorView extends View implements IIndicator {
         requestLayout();
     }
 
-    @Override
-    public void setNormalColor(int normalColor) {
-        mIndicatorOptions.setNormalColor(normalColor);
-    }
-
-    @Override
-    public void setCheckedColor(int checkedColor) {
-        mIndicatorOptions.setCheckedColor(checkedColor);
-    }
-
-
-    /**
-     * @param indicatorGap Indicator间距
-     */
-    public void setIndicatorGap(float indicatorGap) {
-        if (indicatorGap >= 0) {
-            mIndicatorOptions.setIndicatorGap(indicatorGap);
-        }
-    }
-
-    /**
-     * @param slideMode Indicator滑动样式
-     * @see com.zhpan.bannerview.constants.IndicatorSlideMode#NORMAL
-     * @see com.zhpan.bannerview.constants.IndicatorSlideMode#SMOOTH
-     */
-    @Override
-    public void setSlideMode(@AIndicatorSlideMode int slideMode) {
-        mIndicatorOptions.setSlideMode(slideMode);
-    }
-
-    /**
-     * Indicator Slider width or the diameter of circle.
-     *
-     * @param normalIndicatorWidth  未选中Slider width
-     * @param checkedIndicatorWidth 选中Slider width
-     */
-    @Override
-    public void setIndicatorWidth(int normalIndicatorWidth, int checkedIndicatorWidth) {
-        mIndicatorOptions.setNormalIndicatorWidth(normalIndicatorWidth);
-        mIndicatorOptions.setCheckedIndicatorWidth(checkedIndicatorWidth);
-    }
 
     public int getPageSize() {
         return mIndicatorOptions.getPageSize();
@@ -198,11 +155,6 @@ public class BaseIndicatorView extends View implements IIndicator {
         return mIndicatorOptions;
     }
 
-    @Override
-    public void notifyDataChanged() {
-        invalidate();
-    }
-
     @Override
     public void onPageScrollStateChanged(int state) {
     }

+ 5 - 16
bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java

@@ -6,8 +6,12 @@ import android.util.AttributeSet;
 
 /**
  * Created by zhpan on 2017/12/6.
+ *
+ * @deprecated Use {@link IndicatorView} instead.
  */
+@Deprecated
 public class CircleIndicatorView extends BaseIndicatorView {
+
     private float mNormalRadius;
     private float mCheckedRadius;
     private float maxRadius;
@@ -26,7 +30,7 @@ public class CircleIndicatorView extends BaseIndicatorView {
         mPaint.setColor(getNormalColor());
         mNormalRadius = getNormalIndicatorWidth() / 2;
         mCheckedRadius = getCheckedIndicatorWidth() / 2;
-        setIndicatorGap(mNormalRadius * 2);
+        getIndicatorOptions().setIndicatorGap(mNormalRadius * 2);
     }
 
     @Override
@@ -57,21 +61,6 @@ public class CircleIndicatorView extends BaseIndicatorView {
         }
     }
 
-    @Override
-    public void onPageSelected(int position) {
-        super.onPageSelected(position);
-    }
-
-    @Override
-    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        super.onPageScrolled(position, positionOffset, positionOffsetPixels);
-    }
-
-    @Override
-    public void onPageScrollStateChanged(int state) {
-        super.onPageScrollStateChanged(state);
-    }
-
     private void drawSliderStyle(Canvas canvas) {
         mPaint.setColor(getCheckedColor());
         canvas.drawCircle(maxRadius + (2 * mNormalRadius + getIndicatorGap()) * getCurrentPosition() + (2 * mNormalRadius + getIndicatorGap()) * getSlideProgress(),

+ 3 - 30
bannerview/src/main/java/com/zhpan/bannerview/indicator/DashIndicatorView.java

@@ -8,7 +8,10 @@ import com.zhpan.bannerview.constants.IndicatorSlideMode;
 
 /**
  * Created by zhpan on 2017/12/6.
+ *
+ * @deprecated Use {@link IndicatorView} instead.
  */
+@Deprecated
 public class DashIndicatorView extends BaseIndicatorView {
     private float sliderHeight;
     private float maxWidth;
@@ -28,11 +31,6 @@ public class DashIndicatorView extends BaseIndicatorView {
         sliderHeight = getNormalIndicatorWidth() / 2;
     }
 
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-    }
-
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -42,11 +40,6 @@ public class DashIndicatorView extends BaseIndicatorView {
                 (int) (getSliderHeight()));
     }
 
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-    }
-
     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
@@ -92,32 +85,12 @@ public class DashIndicatorView extends BaseIndicatorView {
         drawSliderStyle(canvas);
     }
 
-    @Override
-    public void onPageSelected(int position) {
-        super.onPageSelected(position);
-    }
-
-    @Override
-    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        super.onPageScrolled(position, positionOffset, positionOffsetPixels);
-    }
-
-    @Override
-    public void onPageScrollStateChanged(int state) {
-        super.onPageScrollStateChanged(state);
-    }
-
     private void drawSliderStyle(Canvas canvas) {
         mPaint.setColor(getCheckedColor());
         float left = getCurrentPosition() * (maxWidth) + getCurrentPosition() * +getIndicatorGap() + (maxWidth + getIndicatorGap()) * getSlideProgress();
         canvas.drawRect(left, 0, left + maxWidth, getSliderHeight(), mPaint);
     }
 
-    public DashIndicatorView setSliderHeight(float sliderHeight) {
-        this.sliderHeight = sliderHeight;
-        return this;
-    }
-
     public float getSliderHeight() {
         if (getIndicatorOptions().getSliderHeight() > 0) {
             return getIndicatorOptions().getSliderHeight();

+ 1 - 12
bannerview/src/main/java/com/zhpan/bannerview/indicator/IIndicator.java

@@ -14,19 +14,8 @@ import com.zhpan.bannerview.manager.IndicatorOptions;
  * </pre>
  */
 public interface IIndicator extends ViewPager.OnPageChangeListener {
-    void setPageSize(int pageSize);
-
-    void setNormalColor(int normalColor);
-
-    void setCheckedColor(int checkedColor);
-
-    void setSlideMode(@AIndicatorSlideMode int slideStyle);
 
-    void setIndicatorGap(float gap);
-
-    void setIndicatorWidth(int normalIndicatorWidth, int checkedIndicatorWidth);
+    void setPageSize(int pageSize);
 
     void setIndicatorOptions(IndicatorOptions options);
-
-    void notifyDataChanged();
 }

+ 0 - 19
bannerview/src/main/java/com/zhpan/bannerview/indicator/IndicatorFactory.java

@@ -1,19 +0,0 @@
-package com.zhpan.bannerview.indicator;
-
-import android.content.Context;
-
-import com.zhpan.bannerview.annotation.AIndicatorStyle;
-import com.zhpan.bannerview.constants.IndicatorStyle;
-
-
-public class IndicatorFactory {
-    public static BaseIndicatorView createIndicatorView(Context context, @AIndicatorStyle int indicatorStyle) {
-        BaseIndicatorView indicatorView;
-        if (indicatorStyle == IndicatorStyle.DASH) {
-            indicatorView = new DashIndicatorView(context);
-        } else {
-            indicatorView = new CircleIndicatorView(context);
-        }
-        return indicatorView;
-    }
-}

+ 56 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/IndicatorView.java

@@ -0,0 +1,56 @@
+package com.zhpan.bannerview.indicator;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+
+import com.zhpan.bannerview.indicator.drawer.BaseDrawer;
+import com.zhpan.bannerview.indicator.drawer.DrawerProxy;
+import com.zhpan.bannerview.manager.IndicatorOptions;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2019/11/23.
+ *   Description:The Indicator in BannerViewPager,this include two indicator style,as below:
+ *  {@link com.zhpan.bannerview.constants.IndicatorStyle#CIRCLE }
+ *  {@link com.zhpan.bannerview.constants.IndicatorStyle#DASH}
+ * </pre>
+ */
+public class IndicatorView extends BaseIndicatorView implements IIndicator {
+
+    private DrawerProxy mDrawerProxy;
+
+    public IndicatorView(Context context) {
+        this(context, null);
+    }
+
+    public IndicatorView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public IndicatorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mDrawerProxy = new DrawerProxy(getIndicatorOptions());
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        BaseDrawer.MeasureResult measureResult = mDrawerProxy.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        setMeasuredDimension(measureResult.getMeasureWidth(), measureResult.getMeasureHeight());
+    }
+
+    @Override
+    public void setIndicatorOptions(IndicatorOptions indicatorOptions) {
+        super.setIndicatorOptions(indicatorOptions);
+        mDrawerProxy.setIndicatorOptions(indicatorOptions);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        mDrawerProxy.onDraw(canvas);
+    }
+}

+ 48 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/BaseDrawer.java

@@ -0,0 +1,48 @@
+package com.zhpan.bannerview.indicator.drawer;
+
+import android.graphics.Paint;
+
+import com.zhpan.bannerview.manager.IndicatorOptions;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2019/11/23.
+ *   Description:
+ * </pre>
+ */
+public abstract class BaseDrawer implements IDrawer {
+
+    IndicatorOptions mIndicatorOptions;
+
+    Paint mPaint;
+
+    MeasureResult mMeasureResult;
+
+    BaseDrawer(IndicatorOptions indicatorOptions) {
+        this.mIndicatorOptions = indicatorOptions;
+        mPaint = new Paint();
+        mPaint.setAntiAlias(true);
+        mMeasureResult = new MeasureResult();
+    }
+
+    public class MeasureResult {
+
+        public int measureWidth;
+
+        public int measureHeight;
+
+        public void setMeasureResult(int measureWidth, int measureHeight) {
+            this.measureWidth = measureWidth;
+            this.measureHeight = measureHeight;
+        }
+
+        public int getMeasureWidth() {
+            return measureWidth;
+        }
+
+        public int getMeasureHeight() {
+            return measureHeight;
+        }
+
+    }
+}

+ 61 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/CircleDrawer.java

@@ -0,0 +1,61 @@
+package com.zhpan.bannerview.indicator.drawer;
+
+import android.graphics.Canvas;
+
+import com.zhpan.bannerview.manager.IndicatorOptions;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2019/11/23.
+ *   Description: Circle Indicator drawer.
+ * </pre>
+ */
+public class CircleDrawer extends BaseDrawer {
+
+    private float maxWidth;
+
+    private float minWidth;
+
+    public CircleDrawer(IndicatorOptions indicatorOptions) {
+        super(indicatorOptions);
+    }
+
+    @Override
+    public MeasureResult onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        maxWidth = Math.max(mIndicatorOptions.getNormalIndicatorWidth(), mIndicatorOptions.getCheckedIndicatorWidth());
+        minWidth = Math.min(mIndicatorOptions.getNormalIndicatorWidth(), mIndicatorOptions.getCheckedIndicatorWidth());
+        mMeasureResult.setMeasureResult(getMeasureWidth(), (int)maxWidth);
+        return mMeasureResult;
+    }
+
+    private int getMeasureWidth() {
+        int pageSize = mIndicatorOptions.getPageSize();
+        float indicatorGap = mIndicatorOptions.getIndicatorGap();
+        return (int) ((pageSize - 1) * indicatorGap + maxWidth + (pageSize - 1) * minWidth);
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        drawIndicator(canvas);
+    }
+
+    private void drawIndicator(Canvas canvas) {
+        if (mIndicatorOptions.getPageSize() > 1) {
+            float normalIndicatorWidth = mIndicatorOptions.getNormalIndicatorWidth();
+            for (int i = 0; i < mIndicatorOptions.getPageSize(); i++) {
+                mPaint.setColor(mIndicatorOptions.getNormalColor());
+                canvas.drawCircle(maxWidth / 2 + (normalIndicatorWidth + mIndicatorOptions.getIndicatorGap()) * i,
+                        maxWidth / 2f, normalIndicatorWidth / 2, mPaint);
+            }
+            drawSliderStyle(canvas);
+        }
+    }
+
+    private void drawSliderStyle(Canvas canvas) {
+        mPaint.setColor(mIndicatorOptions.getCheckedColor());
+        float normalIndicatorWidth = mIndicatorOptions.getNormalIndicatorWidth();
+        float indicatorGap = mIndicatorOptions.getIndicatorGap();
+        canvas.drawCircle(maxWidth / 2 + (normalIndicatorWidth + indicatorGap) * mIndicatorOptions.getCurrentPosition() + (normalIndicatorWidth + indicatorGap) * mIndicatorOptions.getSlideProgress(),
+                maxWidth / 2f, mIndicatorOptions.getCheckedIndicatorWidth() / 2, mPaint);
+    }
+}

+ 98 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/DashDrawer.java

@@ -0,0 +1,98 @@
+package com.zhpan.bannerview.indicator.drawer;
+
+import android.graphics.Canvas;
+
+import com.zhpan.bannerview.constants.IndicatorSlideMode;
+import com.zhpan.bannerview.manager.IndicatorOptions;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2019/11/23.
+ *   Description: Dash Indicator Drawer.
+ * </pre>
+ */
+public class DashDrawer extends BaseDrawer {
+
+    private float maxWidth;
+
+    private float minWidth;
+
+    public DashDrawer(IndicatorOptions indicatorOptions) {
+        super(indicatorOptions);
+    }
+
+    @Override
+    public MeasureResult onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        maxWidth = Math.max(mIndicatorOptions.getNormalIndicatorWidth(), mIndicatorOptions.getCheckedIndicatorWidth());
+        minWidth = Math.min(mIndicatorOptions.getNormalIndicatorWidth(), mIndicatorOptions.getCheckedIndicatorWidth());
+        mMeasureResult.setMeasureResult(getMeasureWidth(), (int)mIndicatorOptions.getSliderHeight());
+        return mMeasureResult;
+    }
+
+    private int getMeasureWidth() {
+        int pageSize = mIndicatorOptions.getPageSize();
+        float indicatorGap = mIndicatorOptions.getIndicatorGap();
+        return (int) ((pageSize - 1) * indicatorGap + maxWidth + (pageSize - 1) * minWidth);
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        drawIndicator(canvas);
+    }
+
+    private void drawIndicator(Canvas canvas) {
+        int pageSize = mIndicatorOptions.getPageSize();
+        if (pageSize > 1) {
+            for (int i = 0; i < pageSize; i++) {
+                if (mIndicatorOptions.getSlideMode() == IndicatorSlideMode.SMOOTH) {
+                    smoothSlide(canvas, i);
+                } else {
+                    normalSlide(canvas, i);
+                }
+            }
+        }
+    }
+
+    private void normalSlide(Canvas canvas, int i) {
+        float normalIndicatorWidth = mIndicatorOptions.getNormalIndicatorWidth();
+        int normalColor = mIndicatorOptions.getNormalColor();
+        float indicatorGap = mIndicatorOptions.getIndicatorGap();
+        float sliderHeight = mIndicatorOptions.getSliderHeight();
+        int currentPosition = mIndicatorOptions.getCurrentPosition();
+        if (normalIndicatorWidth == mIndicatorOptions.getCheckedIndicatorWidth()) {
+            mPaint.setColor(normalColor);
+            float left = i * (normalIndicatorWidth) + i * +indicatorGap;
+            canvas.drawRect(left, 0, left + normalIndicatorWidth, sliderHeight, mPaint);
+            drawSliderStyle(canvas);
+        } else {  //  仿支付宝首页轮播图的Indicator
+            if (i < currentPosition) {
+                mPaint.setColor(normalColor);
+                float left = i * minWidth + i * indicatorGap;
+                canvas.drawRect(left, 0, left + minWidth, sliderHeight, mPaint);
+            } else if (i == currentPosition) {
+                mPaint.setColor(mIndicatorOptions.getCheckedColor());
+                float left = i * minWidth + i * indicatorGap;
+                canvas.drawRect(left, 0, left + minWidth + (maxWidth - minWidth), sliderHeight, mPaint);
+            } else {
+                mPaint.setColor(normalColor);
+                float left = i * minWidth + i * indicatorGap + (maxWidth - minWidth);
+                canvas.drawRect(left, 0, left + minWidth, sliderHeight, mPaint);
+            }
+        }
+    }
+
+    private void smoothSlide(Canvas canvas, int i) {
+        mPaint.setColor(mIndicatorOptions.getNormalColor());
+        float left = i * (maxWidth) + i * +mIndicatorOptions.getIndicatorGap() + (maxWidth - minWidth);
+        canvas.drawRect(left, 0, left + minWidth, mIndicatorOptions.getSliderHeight(), mPaint);
+        drawSliderStyle(canvas);
+    }
+
+    private void drawSliderStyle(Canvas canvas) {
+        mPaint.setColor(mIndicatorOptions.getCheckedColor());
+        int currentPosition = mIndicatorOptions.getCurrentPosition();
+        float indicatorGap = mIndicatorOptions.getIndicatorGap();
+        float left = currentPosition * (maxWidth) + currentPosition * +indicatorGap + (maxWidth + indicatorGap) * mIndicatorOptions.getSlideProgress();
+        canvas.drawRect(left, 0, left + maxWidth, mIndicatorOptions.getSliderHeight(), mPaint);
+    }
+}

+ 48 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/DrawerProxy.java

@@ -0,0 +1,48 @@
+package com.zhpan.bannerview.indicator.drawer;
+
+import android.graphics.Canvas;
+
+import com.zhpan.bannerview.manager.IndicatorOptions;
+
+import static com.zhpan.bannerview.constants.IndicatorStyle.CIRCLE;
+import static com.zhpan.bannerview.constants.IndicatorStyle.DASH;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2019/11/23.
+ *   Description: Indicator Drawer Controller.
+ * </pre>
+ */
+public class DrawerProxy implements IDrawer{
+    
+    private IDrawer mIDrawer;
+
+    public DrawerProxy(IndicatorOptions indicatorOptions) {
+        init(indicatorOptions);
+    }
+
+    private void init(IndicatorOptions indicatorOptions) {
+        switch (indicatorOptions.getIndicatorStyle()) {
+            case CIRCLE:
+                mIDrawer = new CircleDrawer(indicatorOptions);
+                break;
+            case DASH:
+                mIDrawer = new DashDrawer(indicatorOptions);
+                break;
+        }
+    }
+
+    public void setIndicatorOptions(IndicatorOptions indicatorOptions) {
+        init(indicatorOptions);
+    }
+
+    @Override
+    public BaseDrawer.MeasureResult onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        return mIDrawer.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        mIDrawer.onDraw(canvas);
+    }
+}

+ 18 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/drawer/IDrawer.java

@@ -0,0 +1,18 @@
+package com.zhpan.bannerview.indicator.drawer;
+
+import android.graphics.Canvas;
+
+import com.zhpan.bannerview.manager.IndicatorOptions;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2019/11/23.
+ *   Description:
+ * </pre>
+ */
+public interface IDrawer {
+
+    BaseDrawer.MeasureResult onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+
+    void onDraw(Canvas canvas);
+}

+ 1 - 1
bannerview/src/main/java/com/zhpan/bannerview/manager/AttributeController.java

@@ -16,7 +16,7 @@ import static com.zhpan.bannerview.manager.BannerOptions.DEFAULT_SCROLL_DURATION
 /**
  * <pre>
  *   Created by zhpan on 2019/11/20.
- *   Description:
+ *   Description:初始化xml的自定义属性
  * </pre>
  */
 public class AttributeController {

+ 6 - 5
bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java

@@ -1,17 +1,20 @@
 package com.zhpan.bannerview.manager;
 
 import com.zhpan.bannerview.constants.PageStyle;
+import com.zhpan.bannerview.utils.BannerUtils;
 
 /**
  * <pre>
  *   Created by zhpan on 2019/11/20.
- *   Description:
+ *   Description:BannerViewPager的配置参数
  * </pre>
  */
 public class BannerOptions {
 
     public BannerOptions() {
         mIndicatorOptions = new IndicatorOptions();
+        mPageMargin = BannerUtils.dp2px(20);
+        mRevealWidth = BannerUtils.dp2px(20);
     }
 
     public static final int DEFAULT_SCROLL_DURATION = 500;
@@ -32,8 +35,6 @@ public class BannerOptions {
 
     private int mRevealWidth;
 
-    private int mIndicatorStyle;
-
     private boolean isCustomIndicator;
 
     private int mPageStyle = PageStyle.NORMAL;
@@ -151,11 +152,11 @@ public class BannerOptions {
     }
 
     public int getIndicatorStyle() {
-        return mIndicatorStyle;
+        return mIndicatorOptions.getIndicatorStyle();
     }
 
     public void setIndicatorStyle(int indicatorStyle) {
-        mIndicatorStyle = indicatorStyle;
+        mIndicatorOptions.setIndicatorStyle(indicatorStyle);
     }
 
     public int getIndicatorSlideMode() {

+ 12 - 2
bannerview/src/main/java/com/zhpan/bannerview/manager/IndicatorOptions.java

@@ -8,7 +8,7 @@ import com.zhpan.bannerview.utils.BannerUtils;
 /**
  * <pre>
  *   Created by zhpan on 2019/11/20.
- *   Description:
+ *   Description:Indicator的配置参数
  * </pre>
  */
 public class IndicatorOptions {
@@ -22,6 +22,8 @@ public class IndicatorOptions {
         slideMode = IndicatorSlideMode.NORMAL;
     }
 
+    private int mIndicatorStyle;
+
     /**
      * 页面size
      */
@@ -158,10 +160,18 @@ public class IndicatorOptions {
     }
 
     public float getSliderHeight() {
-        return sliderHeight;
+        return sliderHeight > 0 ? sliderHeight : normalIndicatorWidth / 2;
     }
 
     public void setSliderHeight(float sliderHeight) {
         this.sliderHeight = sliderHeight;
     }
+
+    public int getIndicatorStyle() {
+        return mIndicatorStyle;
+    }
+
+    public void setIndicatorStyle(int indicatorStyle) {
+        mIndicatorStyle = indicatorStyle;
+    }
 }

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

@@ -4,9 +4,6 @@ import android.content.Context;
 import android.view.animation.Interpolator;
 import android.widget.Scroller;
 
-/**
- * 代码来自https://github.com/youth5201314/banner
- */
 public class BannerScroller extends Scroller {
     private int mDuration = 1000;
 

+ 0 - 3
bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/BasePageTransformer.java

@@ -6,9 +6,6 @@ import android.support.v4.view.ViewPager;
 import android.view.View;
 
 
-/**
- * Created by zhy on 16/5/7.
- */
 public abstract class BasePageTransformer implements ViewPager.PageTransformer {
     protected ViewPager.PageTransformer mPageTransformer = NonPageTransformer.INSTANCE;
     public static final float DEFAULT_CENTER = 0.5f;

+ 0 - 3
bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/NonPageTransformer.java

@@ -4,9 +4,6 @@ import android.support.v4.view.ViewPager;
 import android.view.View;
 
 
-/**
- * Created by zhy on 16/5/7.
- */
 public class NonPageTransformer implements ViewPager.PageTransformer {
     @Override
     public void transformPage(View page, float position) {

+ 0 - 13
bannerview/src/main/java/com/zhpan/bannerview/utils/BannerUtils.java

@@ -23,19 +23,6 @@ public class BannerUtils {
         return (int) (0.5F + dpValue * Resources.getSystem().getDisplayMetrics().density);
     }
 
-    public static float px2dp(float pxValue) {
-        return pxValue / Resources.getSystem().getDisplayMetrics().density;
-    }
-
-    public int dip2px(float dpValue) {
-        return (int) (0.5F + dpValue * this.density);
-    }
-
-    public float px2dip(int pxValue) {
-        return (float) pxValue / this.density;
-    }
-
-
     public static void e(String tag, String msg) {
         if (DEBUG) {
             Log.e(tag, msg);

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

@@ -1,5 +1,6 @@
 package com.zhpan.bannerview.view;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 
 import android.support.v4.view.ViewPager;
@@ -85,6 +86,7 @@ public class CatchViewPager extends ViewPager {
         mBannerScroller.setDuration(scrollDuration);
     }
 
+    @SuppressLint("ClickableViewAccessibility")
     @Override
     public boolean onTouchEvent(MotionEvent ev) {
         if (disableTouchScroll) {

+ 2 - 0
build.gradle

@@ -1,6 +1,7 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
+    ext.kotlin_version = '1.3.41'
     repositories {
         jcenter()
 //        maven {
@@ -12,6 +13,7 @@ buildscript {
         classpath 'com.android.tools.build:gradle:3.5.0'
         classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
         classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }

二进制
download/app.apk