Parcourir la source

Optimize effect of Indicator slide .

张攀 il y a 5 ans
Parent
commit
cb7326bbf5

+ 6 - 6
README.md

@@ -42,14 +42,14 @@ Transform内置样式
    
 latestVersion is: [ ![latestVersion](https://api.bintray.com/packages/zhpanvip/CircleViewPager/bannerview/images/download.svg) ](https://bintray.com/zhpanvip/CircleViewPager/bannerview/_latestVersion)
 
-如果您已迁移到AndroidX请使用2.2.0以上版本
+如果您已迁移到AndroidX请使用2.2.0以上版本
 ```
 implementation 'com.zhpan.library:bannerview:latestVersion'
 
 ```
 如果未迁移到AndroidX请使用:
 ```
-implementation 'com.zhpan.library:bannerview:2.1.3'
+implementation 'com.zhpan.library:bannerview:2.1.4'
 ```
 
   **在xml文件中添加如下代码:**
@@ -116,19 +116,19 @@ public class NetViewHolder implements ViewHolder<BannerData> {
     }
 ```
 
-## TODO 接下来的版本计划
+## TODO 版本计划
 
 ~~(1)优化及重构IndicatorView~~(2.0.1)
 
 ~~(2)修复2.1.0以前版本循环滑动时第一张切换卡顿问题~~ (2.1.0.1)
 
-~~(3)增加页面滑动动画~~(2.1.2)
+~~(3)增加页面滑动动画~~(2.1.2)
 
 ~~(4)迁移AndroidX~~(2.2.0)
 
-(5)增加IndicatorView的滑动样式。
+~~(5)增加IndicatorView的滑动样式~~(2.2.2)
 
-(6)ViewPager更换为ViewPager2
+(6)ViewPager更换为ViewPager2 (3.0.0)
 
 (7)如有问题欢迎提issue,该库会持续更新优化。
 

+ 1 - 1
app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorSlideModeActivity.java

@@ -30,7 +30,7 @@ public class IndicatorSlideModeActivity extends AppCompatActivity {
         setContentView(R.layout.activity_indicator_slide_mode);
         mViewPager = findViewById(R.id.banner_view);
         mList = Arrays.asList(picUrls);
-        mViewPager.setAutoPlay(false).setCanLoop(false)
+        mViewPager.setAutoPlay(false).setCanLoop(true)
                 .setRoundCorner(5f)
                 .setIndicatorRadius(3f,3.5f)
                 .setHolderCreator(SlideModeViewHolder::new)

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

@@ -259,7 +259,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
 
     @Override
     public void onPageScrollStateChanged(int state) {
-        mIndicatorView.onPageScrollStateChanged(state);
         if (isCanLoop) {
             switch (state) {
                 case ViewPager.SCROLL_STATE_IDLE:
@@ -284,7 +283,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
 
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        mIndicatorView.onPageScrolled(getRealPosition(position), positionOffset, positionOffsetPixels);
+        mIndicatorView.onPageScrolled(getRealPosition(position), positionOffset);
     }
 
     private int getRealPosition(int position) {
@@ -434,9 +433,15 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
      */
     public BannerViewPager<T, VH> setIndicatorRadius(@DimenRes int radiusRes) {
         this.normalIndicatorRadius = getContext().getResources().getDimension(radiusRes);
+        this.checkedIndicatorRadius = normalIndicatorRadius;
         return this;
     }
 
+    public BannerViewPager<T, VH> setIndicatorRadius(@DimenRes int normalRadius, @DimenRes int checkRadius) {
+        this.normalIndicatorRadius = getContext().getResources().getDimension(normalRadius);
+        this.checkedIndicatorRadius = getContext().getResources().getDimension(checkRadius);
+        return this;
+    }
 
     /**
      * 设置page滚动时间

+ 8 - 20
bannerview/src/main/java/com/zhpan/bannerview/view/IndicatorView.java

@@ -15,8 +15,8 @@ import com.zhpan.bannerview.Utils.DpUtils;
 /**
  * Created by zhpan on 2017/12/6.
  */
-public class IndicatorView extends View implements ViewPager.OnPageChangeListener {
-
+public class IndicatorView extends View {
+    private static final String tag = "IndicatorView";
     private int normalColor;
     private int checkedColor;
     private Paint mPaint;
@@ -27,8 +27,8 @@ public class IndicatorView extends View implements ViewPager.OnPageChangeListene
     private int height;
     private int currentPosition;
     private float mMargin;
-    private static final String tag = "IndicatorView";
     private IndicatorSlideMode mSlideStyle = IndicatorSlideMode.SMOOTH;
+    private float slideProgress;
 
     public IndicatorView(Context context) {
         this(context, null);
@@ -86,12 +86,14 @@ public class IndicatorView extends View implements ViewPager.OnPageChangeListene
                 canvas.drawCircle(maxRadius + (2 * mNormalRadius + mMargin) * currentPosition, height / 2f, mCheckedRadius, mPaint);
             case SMOOTH:
                 mPaint.setColor(checkedColor);
-                canvas.drawCircle(maxRadius + (2 * mNormalRadius + mMargin) * currentPosition + (2 * mNormalRadius + mMargin) * slideProgress, height / 2f, mCheckedRadius, mPaint);
+                if (currentPosition == mPageSize-1) {
+                    canvas.drawCircle(maxRadius + (2 * mNormalRadius + mMargin) * currentPosition, height / 2f, mCheckedRadius, mPaint);
+                } else
+                    canvas.drawCircle(maxRadius + (2 * mNormalRadius + mMargin) * currentPosition + (2 * mNormalRadius + mMargin) * slideProgress, height / 2f, mCheckedRadius, mPaint);
                 break;
         }
     }
 
-    @Override
     public void onPageSelected(int position) {
         if (mSlideStyle == IndicatorSlideMode.NORMAL) {
             this.currentPosition = position;
@@ -99,10 +101,7 @@ public class IndicatorView extends View implements ViewPager.OnPageChangeListene
         }
     }
 
-    private float slideProgress;
-
-    @Override
-    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+    public void onPageScrolled(int position, float positionOffset) {
         if (mSlideStyle == IndicatorSlideMode.SMOOTH) {
             slideProgress = positionOffset;
             currentPosition = position;
@@ -110,11 +109,6 @@ public class IndicatorView extends View implements ViewPager.OnPageChangeListene
         }
     }
 
-    @Override
-    public void onPageScrollStateChanged(int state) {
-
-    }
-
     public IndicatorView setNormalColor(int normalColor) {
         this.normalColor = normalColor;
         return this;
@@ -131,12 +125,6 @@ public class IndicatorView extends View implements ViewPager.OnPageChangeListene
         return this;
     }
 
-    public IndicatorView setIndicatorRadius(float radiusDp) {
-        this.mNormalRadius = radiusDp;
-        this.mCheckedRadius = radiusDp;
-        return this;
-    }
-
     public IndicatorView setIndicatorRadius(float radiusDp, float checkedRadius) {
         this.mNormalRadius = radiusDp;
         this.mCheckedRadius = checkedRadius;