Forráskód Böngészése

2.6.1 (#65)

* SCALE_IN Transformer supported.

* add attrs.

* Deprecated setRoundCorner,use setRoundRect instead.

* Remove java8 config.

* Fix issue #34

* 修复Smooth模式下Indicator不刷新问题

* update readme
zhpanvip 5 éve
szülő
commit
caf5e933c2
33 módosított fájl, 191 hozzáadás és 411 törlés
  1. 7 7
      README.md
  2. 2 1
      README_CN.md
  3. BIN
      app/release/app-release.apk
  4. 0 1
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PhotoViewActivity.kt
  5. 3 3
      app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.kt
  6. 20 6
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java
  7. 6 1
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java
  8. 4 1
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java
  9. 2 0
      app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java
  10. 0 4
      app/src/main/java/com/example/zhpan/circleviewpager/imageloader/GlideImageLoader.java
  11. 0 247
      app/src/main/java/com/example/zhpan/circleviewpager/imageloader/transformer/BlurTransformation.java
  12. 2 2
      app/src/main/java/com/example/zhpan/circleviewpager/recyclerview/ui/CustomAdapter.java
  13. 1 1
      app/src/main/java/com/example/zhpan/circleviewpager/view/CornerImageView.kt
  14. 1 1
      app/src/main/java/com/example/zhpan/circleviewpager/viewholder/NetViewHolder.java
  15. 30 3
      app/src/main/res/layout/item_header_view.xml
  16. 1 3
      app/src/main/res/layout/item_net.xml
  17. 0 5
      bannerview/build.gradle
  18. 53 27
      bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
  19. 7 5
      bannerview/src/main/java/com/zhpan/bannerview/adapter/BannerPagerAdapter.java
  20. 2 1
      bannerview/src/main/java/com/zhpan/bannerview/annotation/ATransformerStyle.java
  21. 1 0
      bannerview/src/main/java/com/zhpan/bannerview/constants/TransformerStyle.java
  22. 3 2
      bannerview/src/main/java/com/zhpan/bannerview/holder/ViewHolder.java
  23. 19 20
      bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java
  24. 1 1
      bannerview/src/main/java/com/zhpan/bannerview/manager/AttributeController.java
  25. 10 5
      bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java
  26. 2 2
      bannerview/src/main/java/com/zhpan/bannerview/provider/ViewStyleSetter.java
  27. 5 1
      bannerview/src/main/java/com/zhpan/bannerview/transform/PageTransformerFactory.java
  28. 6 21
      bannerview/src/main/java/com/zhpan/bannerview/transform/ScaleInTransformer.java
  29. 0 24
      bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/BasePageTransformer.java
  30. 0 14
      bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/NonPageTransformer.java
  31. 2 2
      bannerview/src/main/java/com/zhpan/bannerview/utils/BannerUtils.java
  32. 1 0
      bannerview/src/main/res/values/attrs.xml
  33. BIN
      download/app.apk

+ 7 - 7
README.md

@@ -58,7 +58,7 @@ BannerViewPager supports three Indicator Styles now. It's also support you to cu
 | BannerViewPager<T, VH> setAutoPlay(boolean autoPlay) | set is atuo play | default value true|
 | BannerViewPager<T, VH> setInterval(int interval) | set the interval of item switch interval |The unit is millisecond,default value 3000ms  |
 | BannerViewPager<T, VH> setScrollDuration(int scrollDuration) | set page scroll duration | set page scroll duration |unit is millisecond,default is 500ms |
-| BannerViewPager<T, VH> setRoundCorner(int radius) | set Round Corner for Banner | required SDK_INT>=LOLLIPOP(API 21)  |
+| BannerViewPager<T, VH> setRoundRect(int radius) | set Round Rectangle for Banner | required SDK_INT>=LOLLIPOP(API 21)  |
 | BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) | set item click listener |  |
 | BannerViewPager<T, VH> setHolderCreator(HolderCreator\<VH> holderCreator) |set Holder Creator  |You must set HolderCreator for BannerViewPager,or will throw NullPointerException|
 | BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator visibility |default value is VISIBLE,added in version 2.4.2|
@@ -378,21 +378,21 @@ public class FigureIndicatorView extends BaseIndicatorView {
 
  - [x] Fix a bug which page frozen sometimes when sliding in version 2.1.0  (2.1.0.1)
 
- - [x] support setTransformStyle(2.1.2)
+ - [x] Set Transform Style Supported(2.1.2)
 
  - [x] Migrate to Androidx(2.2.0)
 
- - [x] Support indicator smooth slide(2.2.2)
+ - [x] indicator smooth slide Supported(2.2.2)
  
- - [x] Support Dash IndicatorView(2.3.+)
+ - [x] Dash IndicatorView Supported(2.3.+)
  
- - [x] Support MULTI_PAGE Style (2.4.0)
+ - [x] MULTI_PAGE Style Supported(2.4.0)
  
  - [x] Optimize code and improve performance in version 2.4.3
  
  - [x] Refactor Indicator again (2.5.0)
- 
- - [ ] Change ViewPager to ViewPager2 (3.0.0)
+ - [x] Fix issue #34 which Indicator smooth slide problem(2.6.1).
+ - [ ] Migrate to ViewPager2 (3.0.0)
 
 
 ## If you have any question you can scan the QR code to join the QQ group to communicate.

+ 2 - 1
README_CN.md

@@ -61,7 +61,7 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 | BannerViewPager<T, VH> setAutoPlay(boolean autoPlay) | 是否开启自动轮播 | 默认值true|
 | BannerViewPager<T, VH> setInterval(int interval) | 自动轮播时间间隔 |单位毫秒,默认值3000  |
 | BannerViewPager<T, VH> setScrollDuration(int scrollDuration) | 设置页面滚动时间 | 设置页面滚动时间 |单位毫秒,默认值500  |
-| BannerViewPager<T, VH> setRoundCorner(int radius) | 设置圆角 |默认无圆角 需要SDK_INT>=LOLLIPOP(API 21)  |
+| BannerViewPager<T, VH> setRoundRect(int radius) | 设置圆角 |默认无圆角 需要SDK_INT>=LOLLIPOP(API 21)  |
 | BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) | 设置页面点击事件 |  |
 | BannerViewPager<T, VH> setHolderCreator(HolderCreator\<VH> holderCreator) |设置HolderCreator  |必须设置HolderCreator,否则会抛出NullPointerException|
 | BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator visibility |默认值VISIBLE 2.4.2 新增|
@@ -391,6 +391,7 @@ public class FigureIndicatorView extends BaseIndicatorView {
  - [x] v2.4.3版本着重优化提升性能
  - [x] 重构Indicator,~~尽量修复Indicator SMOOTH模式下滑动问题~~ (2.5.0)
  - [x] 目前Indicator部分代码比较乱,还有很大很大的优化空间,后续版本将持续优化(2.5.0对Indicator再次进行了重构,重构后代码已经很整洁,但仍然有优化空间)
+ - [x] 修复 issue #34 Indicator 在Smooth模式下存在的问题 (2.6.1).
  - [ ] ViewPager更换为ViewPager2 (3.0.0)
 
 

BIN
app/release/app-release.apk


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

@@ -23,7 +23,6 @@ class PhotoViewActivity : BaseDataActivity() {
         bannerViewPager.setAutoPlay(false)
                 .setCanLoop(false)
                 .setHolderCreator { PhotoViewHolder() }
-                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .create(mDrawableList)
         bannerViewPager.currentItem = 1
     }

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

@@ -30,7 +30,7 @@ class WelcomeActivity : BaseDataActivity(), HolderCreator<CustomPageViewHolder>
 
     private val des = arrayOf("在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人")
 
-    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.STACK, TransformerStyle.DEPTH, TransformerStyle.ROTATE)
+    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.STACK, TransformerStyle.DEPTH, TransformerStyle.ROTATE, TransformerStyle.SCALE_IN)
 
     private val data: List<CustomBean>
         get() {
@@ -56,7 +56,7 @@ class WelcomeActivity : BaseDataActivity(), HolderCreator<CustomPageViewHolder>
         mViewPager = findViewById(R.id.viewpager)
         mViewPager.setAutoPlay(false)
                 .setCanLoop(false)
-                .setPageTransformerStyle(transforms[Random().nextInt(5)])
+                .setPageTransformerStyle(transforms[Random().nextInt(6)])
                 .setScrollDuration(ANIMATION_DURATION)
                 .setIndicatorMargin(0, 0, 0, BannerUtils.dp2px(100f))
                 .setIndicatorGap(resources.getDimension(R.dimen.dp_10).toInt())
@@ -66,7 +66,7 @@ class WelcomeActivity : BaseDataActivity(), HolderCreator<CustomPageViewHolder>
                 .setIndicatorRadius(resources.getDimension(R.dimen.dp_3).toInt(), resources.getDimension(R.dimen.dp_4_5).toInt())
                 .setOnPageChangeListener(object : OnPageChangeListenerAdapter() {
                     override fun onPageSelected(position: Int) {
-                        BannerUtils.e("position:$position")
+                        BannerUtils.log("position:$position")
                         updateUI(position)
                     }
                 })

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

@@ -3,6 +3,7 @@ package com.example.zhpan.circleviewpager.fragment;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import androidx.recyclerview.widget.DividerItemDecoration;
@@ -19,8 +20,9 @@ import com.example.zhpan.circleviewpager.viewholder.NetViewHolder;
 import com.scwang.smartrefresh.header.MaterialHeader;
 import com.scwang.smartrefresh.layout.SmartRefreshLayout;
 import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.constants.PageStyle;
-import com.zhpan.bannerview.utils.BannerUtils;
+import com.zhpan.bannerview.adapter.OnPageChangeListenerAdapter;
+import com.zhpan.bannerview.constants.IndicatorSlideMode;
+import com.zhpan.bannerview.indicator.IndicatorView;
 import com.zhpan.idea.net.common.ResponseObserver;
 import com.zhpan.idea.utils.RxUtil;
 
@@ -39,6 +41,8 @@ public class HomeFragment extends BaseFragment {
     private CustomRecyclerView recyclerView;
     private ArticleAdapter articleAdapter;
     private SmartRefreshLayout mSmartRefreshLayout;
+    private IndicatorView mIndicatorView;
+    private TextView mTvTitle;
 
     @Override
     protected int getLayout() {
@@ -87,6 +91,8 @@ public class HomeFragment extends BaseFragment {
                     public void onSuccess(DataWrapper response) {
                         mBannerViewPager.create(response.getDataBeanList());
                         articleAdapter.setData(response.getArticleList());
+                        if (response.getDataBeanList().size() > 0)
+                            mTvTitle.setText(response.getDataBeanList().get(0).getTitle());
                     }
 
                     @Override
@@ -108,14 +114,20 @@ public class HomeFragment extends BaseFragment {
     private void initBanner() {
         mBannerViewPager
                 .setAutoPlay(true)
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .setInterval(5000)
                 .setScrollDuration(1200)
-//                .setRevealWidth(BannerUtils.dp2px(10))
-                .setPageMargin(BannerUtils.dp2px(10))
-                .setPageStyle(PageStyle.MULTI_PAGE)
+                .setIndicatorView(mIndicatorView)// 这里为了设置标题故用了自定义Indicator,如果无需标题则没必要添加此行代码
                 .setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setHolderCreator(NetViewHolder::new)
-                .setIndicatorMargin(0, 0, 0, (int) getResources().getDimension(R.dimen.dp_18))
+                .setOnPageChangeListener(new OnPageChangeListenerAdapter() {
+                    @Override
+                    public void onPageSelected(int position) {
+                        super.onPageSelected(position);
+                        BannerData bannerData = mBannerViewPager.getList().get(position);
+                        mTvTitle.setText(bannerData.getTitle());
+                    }
+                })
                 .setOnPageClickListener(this::onPageClicked);
     }
 
@@ -127,6 +139,8 @@ public class HomeFragment extends BaseFragment {
     private View getHeaderView() {
         View view = LayoutInflater.from(getMContext()).inflate(R.layout.item_header_view, recyclerView, false);
         mBannerViewPager = view.findViewById(R.id.banner_view);
+        mTvTitle = view.findViewById(R.id.tv_title);
+        mIndicatorView = view.findViewById(R.id.indicator_view);
         return view;
     }
 }

+ 6 - 1
app/src/main/java/com/example/zhpan/circleviewpager/fragment/IndicatorFragment.java

@@ -10,6 +10,7 @@ import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.constants.IndicatorGravity;
+import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.constants.IndicatorStyle;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.idea.utils.ToastUtils;
@@ -39,7 +40,7 @@ public class IndicatorFragment extends BaseFragment {
         radioGroupStyle = view.findViewById(R.id.rg_indicator_style);
         mViewPager = view.findViewById(R.id.banner_view);
         mViewPager.setIndicatorGap(BannerUtils.dp2px(6))
-                .setRoundCorner(BannerUtils.dp2px(6))
+                .setRoundRect(BannerUtils.dp2px(6))
                 .setHolderCreator(() -> new ImageResourceViewHolder(0));
         initRadioGroup();
     }
@@ -72,6 +73,7 @@ public class IndicatorFragment extends BaseFragment {
         mViewPager
                 .setIndicatorStyle(IndicatorStyle.DASH)
                 .setIndicatorGap(0)
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .setIndicatorColor(getColor(R.color.white_alpha_75), getColor(R.color.white))
                 .setIndicatorWidth(BannerUtils.dp2px(12), BannerUtils.dp2px(12))
                 .setIndicatorHeight(BannerUtils.dp2px(1.5f))
@@ -83,6 +85,7 @@ public class IndicatorFragment extends BaseFragment {
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorGap(BannerUtils.dp2px(4))
                 .setPageMargin(0)
+                .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
                 .setIndicatorHeight(BannerUtils.dp2px(4f))
                 .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
@@ -91,6 +94,7 @@ public class IndicatorFragment extends BaseFragment {
 
     private void setupCircleIndicator() {
         mViewPager.setIndicatorStyle(IndicatorStyle.CIRCLE)
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorGap(BannerUtils.dp2px(6))
                 .setPageMargin(0)
@@ -103,6 +107,7 @@ public class IndicatorFragment extends BaseFragment {
         mViewPager.setIndicatorStyle(IndicatorStyle.DASH)
                 .setIndicatorHeight(BannerUtils.dp2px(3f))
                 .setIndicatorGravity(IndicatorGravity.CENTER)
+                .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
                 .setIndicatorGap(BannerUtils.dp2px(3))
                 .setPageMargin(0)
                 .setIndicatorWidth(BannerUtils.dp2px(3), BannerUtils.dp2px(10))

+ 4 - 1
app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java

@@ -13,6 +13,7 @@ import com.example.zhpan.circleviewpager.view.FigureIndicatorView;
 import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.constants.IndicatorGravity;
+import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.indicator.IIndicator;
 import com.zhpan.bannerview.indicator.IndicatorView;
 import com.zhpan.bannerview.utils.BannerUtils;
@@ -51,7 +52,7 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
         view.findViewById(R.id.tv_photo_view).setOnClickListener(this);
         view.findViewById(R.id.btn_refresh).setOnClickListener(v -> updateData());
         mViewPager.setIndicatorGap(BannerUtils.dp2px(6))
-                .setRoundCorner(BannerUtils.dp2px(6))
+                .setRoundRect(BannerUtils.dp2px(6))
                 .setOnPageClickListener(position -> ToastUtils.show("Position:" + position))
                 .setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setHolderCreator(() -> new ImageResourceViewHolder(0));
@@ -84,6 +85,7 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
     private void setIndicatorBelowOfBanner() {
         mIndicatorView.setVisibility(View.VISIBLE);
         mViewPager
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .setIndicatorVisibility(View.GONE)
                 .setIndicatorView(mIndicatorView)
                 .create(getMDrawableList());
@@ -93,6 +95,7 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
     private void setupCustomIndicator() {
         mIndicatorView.setVisibility(View.INVISIBLE);
         mViewPager.setAutoPlay(false).setCanLoop(true)
+                .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
                 .setIndicatorVisibility(View.VISIBLE)
                 .setPageMargin(BannerUtils.dp2px(20))
                 .setIndicatorGravity(IndicatorGravity.END)

+ 2 - 0
app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java

@@ -9,6 +9,7 @@ import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.annotation.APageStyle;
+import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.constants.PageStyle;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.idea.utils.ToastUtils;
@@ -38,6 +39,7 @@ public class PageFragment extends BaseFragment {
         mRadioGroupPageStyle = view.findViewById(R.id.rg_page_style);
         radioButton = view.findViewById(R.id.rb_multi_page);
         mViewPager
+                .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
                 .setHolderCreator(() -> new ImageResourceViewHolder(BannerUtils.dp2px(5)))
                 .setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setOnPageClickListener(position -> ToastUtils.show("position:" + position))

+ 0 - 4
app/src/main/java/com/example/zhpan/circleviewpager/imageloader/GlideImageLoader.java

@@ -10,7 +10,6 @@ import com.bumptech.glide.load.Transformation;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
 import com.bumptech.glide.request.RequestOptions;
-import com.example.zhpan.circleviewpager.imageloader.transformer.BlurTransformation;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -57,9 +56,6 @@ public class GlideImageLoader implements IImageLoaderStrategy {
             list.add(new RoundedCorners((int)options.getRoundCorner()));
         }
 
-        if(options.isBlurImage()) {
-            list.add(new BlurTransformation(options.getBlurValue()));
-        }
 
         for(Transformation<Bitmap> transformation : list) {
             requestOptions.transform(transformation);

+ 0 - 247
app/src/main/java/com/example/zhpan/circleviewpager/imageloader/transformer/BlurTransformation.java

@@ -1,247 +0,0 @@
-package com.example.zhpan.circleviewpager.imageloader.transformer;
-
-import android.graphics.Bitmap;
-import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-
-import com.bumptech.glide.load.Key;
-import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
-import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
-
-import java.security.MessageDigest;
-
-public class BlurTransformation extends BitmapTransformation {
-    private static final String ID = BlurTransformation.class.getName();
-    private static final byte[] ID_BYTES = ID.getBytes(Key.CHARSET);
-
-    private int defaultRadius = 15;
-
-    public BlurTransformation(@IntRange(from = 0) int radius) {
-        defaultRadius = radius;
-    }
-
-    @Override
-    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
-        messageDigest.update(ID_BYTES);
-
-    }
-
-    @Override
-    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth,
-                               int outHeight) {
-        return fastBlur(toTransform, defaultRadius);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        return o instanceof BlurTransformation;
-    }
-
-    @Override
-    public int hashCode() {
-        return ID.hashCode();
-    }
-
-    private static Bitmap fastBlur(Bitmap sentBitmap, int radius) {
-        // Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);
-        if(sentBitmap == null) {
-            return null;
-        }
-        if(radius < 1) {
-            return null;
-        }
-
-        int w = sentBitmap.getWidth();
-        int h = sentBitmap.getHeight();
-
-        int[] pix = new int[w * h];
-        // Log.e("pix", w + " " + h + " " + pix.length);
-        sentBitmap.getPixels(pix, 0, w, 0, 0, w, h);
-
-        int wm = w - 1;
-        int hm = h - 1;
-        int wh = w * h;
-        int div = radius + radius + 1;
-
-        int r[] = new int[wh];
-        int g[] = new int[wh];
-        int b[] = new int[wh];
-        int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
-        int vmin[] = new int[Math.max(w, h)];
-
-        int divsum = (div + 1) >> 1;
-        divsum *= divsum;
-        int temp = 256 * divsum;
-        int dv[] = new int[temp];
-        for(i = 0; i < temp; i++) {
-            dv[i] = (i / divsum);
-        }
-
-        yw = yi = 0;
-
-        int[][] stack = new int[div][3];
-        int stackpointer;
-        int stackstart;
-        int[] sir;
-        int rbs;
-        int r1 = radius + 1;
-        int routsum, goutsum, boutsum;
-        int rinsum, ginsum, binsum;
-
-        for(y = 0; y < h; y++) {
-            rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
-            for(i = -radius; i <= radius; i++) {
-                p = pix[yi + Math.min(wm, Math.max(i, 0))];
-                sir = stack[i + radius];
-                sir[0] = (p & 0xff0000) >> 16;
-                sir[1] = (p & 0x00ff00) >> 8;
-                sir[2] = (p & 0x0000ff);
-                rbs = r1 - Math.abs(i);
-                rsum += sir[0] * rbs;
-                gsum += sir[1] * rbs;
-                bsum += sir[2] * rbs;
-                if(i > 0) {
-                    rinsum += sir[0];
-                    ginsum += sir[1];
-                    binsum += sir[2];
-                } else {
-                    routsum += sir[0];
-                    goutsum += sir[1];
-                    boutsum += sir[2];
-                }
-            }
-            stackpointer = radius;
-
-            for(x = 0; x < w; x++) {
-
-                r[yi] = dv[rsum];
-                g[yi] = dv[gsum];
-                b[yi] = dv[bsum];
-
-                rsum -= routsum;
-                gsum -= goutsum;
-                bsum -= boutsum;
-
-                stackstart = stackpointer - radius + div;
-                sir = stack[stackstart % div];
-
-                routsum -= sir[0];
-                goutsum -= sir[1];
-                boutsum -= sir[2];
-
-                if(y == 0) {
-                    vmin[x] = Math.min(x + radius + 1, wm);
-                }
-                p = pix[yw + vmin[x]];
-
-                sir[0] = (p & 0xff0000) >> 16;
-                sir[1] = (p & 0x00ff00) >> 8;
-                sir[2] = (p & 0x0000ff);
-
-                rinsum += sir[0];
-                ginsum += sir[1];
-                binsum += sir[2];
-
-                rsum += rinsum;
-                gsum += ginsum;
-                bsum += binsum;
-
-                stackpointer = (stackpointer + 1) % div;
-                sir = stack[(stackpointer) % div];
-
-                routsum += sir[0];
-                goutsum += sir[1];
-                boutsum += sir[2];
-
-                rinsum -= sir[0];
-                ginsum -= sir[1];
-                binsum -= sir[2];
-                yi++;
-            }
-            yw += w;
-        }
-        for(x = 0; x < w; x++) {
-            rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
-            yp = -radius * w;
-            for(i = -radius; i <= radius; i++) {
-                yi = Math.max(0, yp) + x;
-
-                sir = stack[i + radius];
-
-                sir[0] = r[yi];
-                sir[1] = g[yi];
-                sir[2] = b[yi];
-
-                rbs = r1 - Math.abs(i);
-
-                rsum += r[yi] * rbs;
-                gsum += g[yi] * rbs;
-                bsum += b[yi] * rbs;
-
-                if(i > 0) {
-                    rinsum += sir[0];
-                    ginsum += sir[1];
-                    binsum += sir[2];
-                } else {
-                    routsum += sir[0];
-                    goutsum += sir[1];
-                    boutsum += sir[2];
-                }
-
-                if(i < hm) {
-                    yp += w;
-                }
-            }
-            yi = x;
-            stackpointer = radius;
-            for(y = 0; y < h; y++) {
-                // Preserve alpha channel: ( 0xff000000 & pix[yi] )
-                pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum];
-
-                rsum -= routsum;
-                gsum -= goutsum;
-                bsum -= boutsum;
-
-                stackstart = stackpointer - radius + div;
-                sir = stack[stackstart % div];
-
-                routsum -= sir[0];
-                goutsum -= sir[1];
-                boutsum -= sir[2];
-
-                if(x == 0) {
-                    vmin[y] = Math.min(y + r1, hm) * w;
-                }
-                p = x + vmin[y];
-
-                sir[0] = r[p];
-                sir[1] = g[p];
-                sir[2] = b[p];
-
-                rinsum += sir[0];
-                ginsum += sir[1];
-                binsum += sir[2];
-
-                rsum += rinsum;
-                gsum += ginsum;
-                bsum += binsum;
-
-                stackpointer = (stackpointer + 1) % div;
-                sir = stack[stackpointer];
-
-                routsum += sir[0];
-                goutsum += sir[1];
-                boutsum += sir[2];
-
-                rinsum -= sir[0];
-                ginsum -= sir[1];
-                binsum -= sir[2];
-
-                yi += w;
-            }
-        }
-        // bitmap.setPixels(pix, 0, w, 0, 0, w, h);
-        // return (bitmap);
-        return Bitmap.createBitmap(pix, 0, w, w, h, Bitmap.Config.ARGB_8888);
-    }
-}

+ 2 - 2
app/src/main/java/com/example/zhpan/circleviewpager/recyclerview/ui/CustomAdapter.java

@@ -91,7 +91,7 @@ public final class CustomAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                 headcount = 0;
             }
 //                customViewHolder.setIsRecyclable(false);
-//            Log.e("CustomAdapter", "onCreateViewHolder#HEADVIEW_TYPE");
+//            Log.log("CustomAdapter", "onCreateViewHolder#HEADVIEW_TYPE");
             return customViewHolder;
 //            }else{
 //                return new CustomViewHolder(mCache.get(contentView.getTag()));
@@ -159,7 +159,7 @@ public final class CustomAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                     }
                 }
             });
-//            Log.e("CustomAdapter", "onBindViewHolder" + position + "------->" + customViewHolder);
+//            Log.log("CustomAdapter", "onBindViewHolder" + position + "------->" + customViewHolder);
         } else {
             mAdapter.onBindViewHolder(viewHolder, position - getHeadSize());
         }

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

@@ -13,7 +13,7 @@ class CornerImageView @JvmOverloads constructor(context: Context, attrs: Attribu
     fun setRoundCorner(radius: Int) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             val viewStyleSetter = ViewStyleSetter(this)
-            viewStyleSetter.setRoundCorner(radius.toFloat())
+            viewStyleSetter.setRoundRect(radius.toFloat())
         }
     }
 }

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

@@ -26,7 +26,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
     @Override
     public void onBind(View itemView, BannerData data, int position, int size) {
         CornerImageView imageView = itemView.findViewById(R.id.banner_image);
-        imageView.setRoundCorner(BannerUtils.dp2px(5));
+        imageView.setRoundCorner(BannerUtils.dp2px(0));
         ImageLoaderOptions options = new ImageLoaderOptions.Builder()
                 .into(imageView).load(data.getImagePath())
                 .placeHolder(R.drawable.placeholder).build();

+ 30 - 3
app/src/main/res/layout/item_header_view.xml

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="200dp"
     android:orientation="vertical">
 
     <com.zhpan.bannerview.BannerViewPager
@@ -9,4 +10,30 @@
         android:layout_width="match_parent"
         android:layout_height="200dp" />
 
-</LinearLayout>
+    <!--这里为了设置标题故用了自定义Indicator,如果无需标题则没必要将Indicator定义在此处-->
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="35dp"
+        android:layout_alignParentBottom="true"
+        android:background="#77000000">
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginStart="@dimen/dp_15"
+            android:textColor="@color/white"
+            android:textSize="14sp"
+            tools:text="This is Title" />
+
+        <com.zhpan.bannerview.indicator.IndicatorView
+            android:id="@+id/indicator_view"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentEnd="true"
+            android:layout_centerVertical="true"
+            android:layout_marginEnd="@dimen/dp_15" />
+    </RelativeLayout>
+
+</RelativeLayout>

+ 1 - 3
app/src/main/res/layout/item_net.xml

@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingTop="10dp"
-    android:paddingBottom="10dp">
+    android:layout_height="wrap_content">
 
     <com.example.zhpan.circleviewpager.view.CornerImageView
         android:id="@+id/banner_image"

+ 0 - 5
bannerview/build.gradle

@@ -21,11 +21,6 @@ android {
         }
     }
 
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
-    }
-
 }
 
 dependencies {

+ 53 - 27
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -29,7 +29,7 @@ import com.zhpan.bannerview.indicator.IndicatorView;
 import com.zhpan.bannerview.indicator.IIndicator;
 import com.zhpan.bannerview.manager.BannerManager;
 import com.zhpan.bannerview.manager.BannerOptions;
-import com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer;
+import com.zhpan.bannerview.transform.ScaleInTransformer;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.bannerview.adapter.BannerPagerAdapter;
 import com.zhpan.bannerview.holder.HolderCreator;
@@ -44,8 +44,8 @@ import static com.zhpan.bannerview.adapter.BannerPagerAdapter.MAX_VALUE;
 import static com.zhpan.bannerview.constants.IndicatorGravity.CENTER;
 import static com.zhpan.bannerview.constants.IndicatorGravity.END;
 import static com.zhpan.bannerview.constants.IndicatorGravity.START;
-import static com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer.DEFAULT_MIN_SCALE;
-import static com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer.MAX_SCALE;
+import static com.zhpan.bannerview.transform.ScaleInTransformer.DEFAULT_MIN_SCALE;
+import static com.zhpan.bannerview.transform.ScaleInTransformer.MAX_SCALE;
 
 /**
  * Created by zhpan on 2017/3/28.
@@ -71,7 +71,12 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     private Handler mHandler = new Handler();
 
-    private Runnable mRunnable = this::handlePosition;
+    private Runnable mRunnable = new Runnable() {
+        @Override
+        public void run() {
+            handlePosition();
+        }
+    };
 
     public BannerViewPager(Context context) {
         this(context, null);
@@ -112,22 +117,25 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     @SuppressLint("ClickableViewAccessibility")
     private void setTouchListener() {
-        mViewPager.setOnTouchListener((v, event) -> {
-            int action = event.getAction();
-            switch (action) {
-                case MotionEvent.ACTION_DOWN:
-                case MotionEvent.ACTION_MOVE:
-                    setLooping(true);
-                    stopLoop();
-                    break;
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    setLooping(false);
-                    startLoop();
-                default:
-                    break;
+        mViewPager.setOnTouchListener(new OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                int action = event.getAction();
+                switch (action) {
+                    case MotionEvent.ACTION_DOWN:
+                    case MotionEvent.ACTION_MOVE:
+                        BannerViewPager.this.setLooping(true);
+                        BannerViewPager.this.stopLoop();
+                        break;
+                    case MotionEvent.ACTION_UP:
+                    case MotionEvent.ACTION_CANCEL:
+                        BannerViewPager.this.setLooping(false);
+                        BannerViewPager.this.startLoop();
+                    default:
+                        break;
+                }
+                return false;
             }
-            return false;
         });
     }
 
@@ -202,6 +210,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     private void setIndicatorValues(List<T> list) {
         BannerOptions bannerOptions = mBannerManager.bannerOptions();
+        bannerOptions.resetIndicatorOptions();
         if (isCustomIndicator && null != mIndicatorView) {
             initIndicator(mIndicatorView);
         } else {
@@ -251,10 +260,10 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     }
 
     private void initRoundCorner() {
-        int roundCorner = mBannerManager.bannerOptions().getRoundCorner();
+        int roundCorner = mBannerManager.bannerOptions().getRoundRectRadius();
         if (roundCorner > 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
-            viewStyleSetter.setRoundCorner(roundCorner);
+            viewStyleSetter.setRoundRect(roundCorner);
         }
     }
 
@@ -288,9 +297,12 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         mBannerPagerAdapter =
                 new BannerPagerAdapter<>(list, holderCreator);
         mBannerPagerAdapter.setCanLoop(isCanLoop());
-        mBannerPagerAdapter.setPageClickListener(position -> {
-            if (mOnPageClickListener != null) {
-                mOnPageClickListener.onPageClick(position);
+        mBannerPagerAdapter.setPageClickListener(new BannerPagerAdapter.PageClickListener() {
+            @Override
+            public void onPageClick(int position) {
+                if (mOnPageClickListener != null) {
+                    mOnPageClickListener.onPageClick(position);
+                }
             }
         });
         return mBannerPagerAdapter;
@@ -382,12 +394,26 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     }
 
     /**
-     * 设置圆角ViewPager 只有在SDK_INT>=LOLLIPOP(API 21)时有效
-     *
      * @param radius 圆角大小
+     * @deprecated Use{@link BannerViewPager#setRoundRect(int)} instead.
+     * <p>
+     * 设置圆角ViewPager 只有在SDK_INT>=LOLLIPOP(API 21)时有效
      */
+    @Deprecated
     public BannerViewPager<T, VH> setRoundCorner(int radius) {
-        mBannerManager.bannerOptions().setRoundCorner(radius);
+        mBannerManager.bannerOptions().setRoundRectRadius(radius);
+        return this;
+    }
+
+    /**
+     * Set round rectangle effect for BannerViewPager.
+     * <p>
+     * Require SDK_INT>=LOLLIPOP(API 21)
+     *
+     * @param radius round radius
+     */
+    public BannerViewPager<T, VH> setRoundRect(int radius) {
+        mBannerManager.bannerOptions().setRoundRectRadius(radius);
         return this;
     }
 

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

@@ -56,7 +56,6 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
     public @NonNull
     Object instantiateItem(@NonNull final ViewGroup container, final int position) {
         View itemView = getView(container, BannerUtils.getRealPosition(isCanLoop, position, mList.size()));
-
         container.addView(itemView);
         return itemView;
     }
@@ -97,11 +96,14 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
         return itemView;
     }
 
-    private void setViewListener(View view, int position) {
+    private void setViewListener(View view, final int position) {
         if (view != null)
-            view.setOnClickListener(v -> {
-                if (null != mPageClickListener)
-                    mPageClickListener.onPageClick(position);
+            view.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (null != mPageClickListener)
+                        mPageClickListener.onPageClick(position);
+                }
             });
     }
 

+ 2 - 1
bannerview/src/main/java/com/zhpan/bannerview/annotation/ATransformerStyle.java

@@ -11,6 +11,7 @@ import static com.zhpan.bannerview.constants.TransformerStyle.ACCORDION;
 import static com.zhpan.bannerview.constants.TransformerStyle.DEPTH;
 import static com.zhpan.bannerview.constants.TransformerStyle.NONE;
 import static com.zhpan.bannerview.constants.TransformerStyle.ROTATE;
+import static com.zhpan.bannerview.constants.TransformerStyle.SCALE_IN;
 import static com.zhpan.bannerview.constants.TransformerStyle.STACK;
 
 /**
@@ -19,7 +20,7 @@ import static com.zhpan.bannerview.constants.TransformerStyle.STACK;
  *   Description:
  * </pre>
  */
-@IntDef({NONE, DEPTH, STACK, ACCORDION, ROTATE})
+@IntDef({NONE, DEPTH, STACK, ACCORDION, ROTATE,SCALE_IN})
 @Retention(RetentionPolicy.SOURCE)
 @Target(ElementType.PARAMETER)
 public @interface ATransformerStyle {

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

@@ -6,4 +6,5 @@ public interface TransformerStyle {
     int STACK = 1 << 2;
     int ACCORDION = 1 << 3;
     int ROTATE = 1 << 4;
+    int SCALE_IN = 1 << 5;
 }

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

@@ -11,10 +11,11 @@ import androidx.annotation.LayoutRes;
 
 public interface ViewHolder<T> {
 
+    /**
+     * @return Layout Resource of BannerViewPager item
+     */
     @LayoutRes int getLayoutId();
 
-//    void createView(View itemView,int position);
-
     /**
      * @param itemView  ViewPager item View
      * @param data     实体类对象

+ 19 - 20
bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java

@@ -43,32 +43,31 @@ public class BaseIndicatorView extends View implements IIndicator {
             setCurrentPosition(position);
             setSlideProgress(0);
             invalidate();
-        } else if (getSlideMode() == IndicatorSlideMode.SMOOTH) {
-            boolean slideToRight = mIndicatorOptions.isSlideToRight();
-            if (position == 0 && slideToRight) {
-                setCurrentPosition(0);
-                setSlideProgress(0);
-                invalidate();
-            } else if (position == getPageSize() - 1 && !slideToRight) {
-                setCurrentPosition(getPageSize() - 1);
-                setSlideProgress(0);
-                invalidate();
-            }
         }
     }
 
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        if (getSlideMode() == IndicatorSlideMode.SMOOTH) {
-            setSlideToRight(isSlideToRight(position, positionOffset));
-            //  TODO 解决滑动过快时positionOffset不会等0的情况
-            if (positionOffset == 0) {
-                setPrePosition(position);
-            }
-            if (!(position == getPageSize() - 1)) {
-                float slideProgress = (getCurrentPosition() == getPageSize() - 1) && isSlideToRight() ? 0 : positionOffset;
-                setSlideProgress(slideProgress);
+        if (getSlideMode() == IndicatorSlideMode.SMOOTH && getPageSize() > 1 && positionOffset != 0) {
+            scrollSlider(position, positionOffset);
+        }
+    }
+
+    private void scrollSlider(int position, float positionOffset) {
+        for (int i = 0; i < getPageSize(); i++) {
+            if (position % getPageSize() == getPageSize() - 1) { //   最后一个页面与第一个页面
+                if (positionOffset < 0.5) {
+                    setCurrentPosition(position);
+                    setSlideProgress(0);
+                    invalidate();
+                } else {
+                    setCurrentPosition(0);
+                    setSlideProgress(0);
+                    invalidate();
+                }
+            } else {    //  中间页面
                 setCurrentPosition(position);
+                setSlideProgress(positionOffset);
                 invalidate();
             }
         }

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

@@ -69,7 +69,7 @@ public class AttributeController {
         mBannerOptions.setAutoPlay(isAutoPlay);
         mBannerOptions.setCanLoop(isCanLoop);
         mBannerOptions.setPageMargin(pageMargin);
-        mBannerOptions.setRoundCorner(roundCorner);
+        mBannerOptions.setRoundRectRadius(roundCorner);
         mBannerOptions.setRevealWidth(revealWidth);
         mBannerOptions.setPageStyle(pageStyle);
         mBannerOptions.setScrollDuration(scrollDuration);

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

@@ -43,7 +43,7 @@ public class BannerOptions {
 
     private int mScrollDuration;
 
-    private int mRoundCorner;
+    private int mRoundRadius;
 
     private boolean disableTouchScroll;
 
@@ -197,12 +197,12 @@ public class BannerOptions {
         mIndicatorMargin = new IndicatorMargin(left, top, right, bottom);
     }
 
-    public int getRoundCorner() {
-        return mRoundCorner;
+    public int getRoundRectRadius() {
+        return mRoundRadius;
     }
 
-    public void setRoundCorner(int roundCorner) {
-        this.mRoundCorner = roundCorner;
+    public void setRoundRectRadius(int roundRadius) {
+        this.mRoundRadius = roundRadius;
     }
 
     public int getScrollDuration() {
@@ -229,6 +229,11 @@ public class BannerOptions {
         this.disableTouchScroll = disableTouchScroll;
     }
 
+    public void resetIndicatorOptions(){
+        mIndicatorOptions.setCurrentPosition(0);
+        mIndicatorOptions.setSlideProgress(0);
+    }
+
     public static class IndicatorMargin {
 
         private int left, right, top, bottom;

+ 2 - 2
bannerview/src/main/java/com/zhpan/bannerview/provider/ViewStyleSetter.java

@@ -27,7 +27,7 @@ public class ViewStyleSetter {
      * @param radius 圆角半径
      */
     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-    public void setRoundCorner(float radius) {
+    public void setRoundRect(float radius) {
         this.mView.setClipToOutline(true);// 用outline裁剪内容区域
         this.mView.setOutlineProvider(new RoundViewOutlineProvider(radius));
     }
@@ -36,7 +36,7 @@ public class ViewStyleSetter {
      * 设置View为圆形
      */
     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-    public void setOval() {
+    public void setOvalView() {
         this.mView.setClipToOutline(true);// 用outline裁剪内容区域
         this.mView.setOutlineProvider(new OvalViewOutlineProvider());
     }

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

@@ -5,6 +5,7 @@ import androidx.viewpager.widget.ViewPager;
 import static com.zhpan.bannerview.constants.TransformerStyle.ACCORDION;
 import static com.zhpan.bannerview.constants.TransformerStyle.DEPTH;
 import static com.zhpan.bannerview.constants.TransformerStyle.ROTATE;
+import static com.zhpan.bannerview.constants.TransformerStyle.SCALE_IN;
 import static com.zhpan.bannerview.constants.TransformerStyle.STACK;
 
 
@@ -17,7 +18,7 @@ public class PageTransformerFactory {
                 transformer = new DepthPageTransformer();
                 break;
             case ROTATE:
-                transformer=new RotateUpTransformer();
+                transformer = new RotateUpTransformer();
                 break;
             case STACK:
                 transformer = new StackTransformer();
@@ -25,6 +26,9 @@ public class PageTransformerFactory {
             case ACCORDION:
                 transformer = new AccordionTransformer();
                 break;
+            case SCALE_IN:
+                transformer = new ScaleInTransformer(ScaleInTransformer.DEFAULT_MIN_SCALE);
+                break;
         }
         return transformer;
     }

+ 6 - 21
bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/ScaleInTransformer.java → bannerview/src/main/java/com/zhpan/bannerview/transform/ScaleInTransformer.java

@@ -1,37 +1,22 @@
-package com.zhpan.bannerview.transform.pagestyle;
+package com.zhpan.bannerview.transform;
 
-import android.annotation.TargetApi;
-import android.os.Build;
 import android.view.View;
 
 import androidx.viewpager.widget.ViewPager;
 
-public class ScaleInTransformer extends BasePageTransformer {
+public class ScaleInTransformer implements ViewPager.PageTransformer {
 
+    private static final float DEFAULT_CENTER = 0.5f;
     public static final float DEFAULT_MIN_SCALE = 0.85f;
     public static final float MAX_SCALE = 0.999f;
-    private float mMinScale = DEFAULT_MIN_SCALE;
-
-    public ScaleInTransformer() {
-
-    }
+    private float mMinScale;
 
     public ScaleInTransformer(float minScale) {
-        this(minScale, NonPageTransformer.INSTANCE);
-    }
-
-    public ScaleInTransformer(ViewPager.PageTransformer pageTransformer) {
-        this(DEFAULT_MIN_SCALE, pageTransformer);
-    }
-
-    public ScaleInTransformer(float minScale, ViewPager.PageTransformer pageTransformer) {
         mMinScale = minScale;
-        mPageTransformer = pageTransformer;
     }
 
-
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public void pageTransform(View view, float position) {
+    @Override
+    public void transformPage(View view, float position) {
         int pageWidth = view.getWidth();
         int pageHeight = view.getHeight();
 

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

@@ -1,24 +0,0 @@
-package com.zhpan.bannerview.transform.pagestyle;
-
-import android.annotation.TargetApi;
-import android.os.Build;
-import android.view.View;
-
-import androidx.viewpager.widget.ViewPager;
-
-public abstract class BasePageTransformer implements ViewPager.PageTransformer {
-    protected ViewPager.PageTransformer mPageTransformer = NonPageTransformer.INSTANCE;
-    public static final float DEFAULT_CENTER = 0.5f;
-
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public void transformPage(View view, float position) {
-        if (mPageTransformer != null) {
-            mPageTransformer.transformPage(view, position);
-        }
-
-        pageTransform(view, position);
-    }
-
-    protected abstract void pageTransform(View view, float position);
-
-}

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

@@ -1,14 +0,0 @@
-package com.zhpan.bannerview.transform.pagestyle;
-
-import android.view.View;
-
-import androidx.viewpager.widget.ViewPager;
-
-public class NonPageTransformer implements ViewPager.PageTransformer {
-    @Override
-    public void transformPage(View page, float position) {
-        page.setScaleX(0.999f);
-    }
-
-    public static final ViewPager.PageTransformer INSTANCE = new NonPageTransformer();
-}

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

@@ -23,13 +23,13 @@ public class BannerUtils {
         return (int) (0.5F + dpValue * Resources.getSystem().getDisplayMetrics().density);
     }
 
-    public static void e(String tag, String msg) {
+    public static void log(String tag, String msg) {
         if (DEBUG) {
             Log.e(tag, msg);
         }
     }
 
-    public static void e(String msg) {
+    public static void log(String msg) {
         if (DEBUG) {
             Log.e("BannerView", msg);
         }

+ 1 - 0
bannerview/src/main/res/values/attrs.xml

@@ -39,6 +39,7 @@
             <enum name="depth" value="2" />
             <enum name="stack" value="4" />
             <enum name="accordion" value="8" />
+            <enum name="scale_in" value="16" />
         </attr>
 
         <attr name="bvp_indicator_visibility" format="enum">

BIN
download/app.apk