Browse Source

Optimize code

zhangpan 5 years ago
parent
commit
8c5a3c6ebe

+ 1 - 1
README.md

@@ -15,7 +15,7 @@
 | ![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi.gif) |
 
 ## 3.设置IndicatorViewStyle
-BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。下图是一个自定义仿支付宝的Indicator:
+BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。
 
 | CIRCLE | DASH | 自定义 |
 |--|--|--|

+ 7 - 4
app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java

@@ -27,9 +27,9 @@ public class IndicatorStyleActivity extends BaseDataActivity {
         setContentView(R.layout.activity_indicator_slide_mode);
         setTitle(getString(R.string.indicator_style));
         mViewPager = findViewById(R.id.banner_view_dash);
-        mViewPager.setRoundCorner(DpUtils.dp2px(5))
+        mViewPager.setRoundCorner(DpUtils.dp2px(8))
                 .setIndicatorGap(DpUtils.dp2px(6))
-                .setHolderCreator(ImageResourceViewHolder::new);
+                .setHolderCreator(() -> new ImageResourceViewHolder(0));
         initRadioGroup();
     }
 
@@ -60,6 +60,9 @@ public class IndicatorStyleActivity extends BaseDataActivity {
     private void setupCircleIndicator() {
         mViewPager.setIndicatorStyle(IndicatorStyle.CIRCLE)
                 .setIndicatorGravity(IndicatorGravity.CENTER)
+                .setIndicatorGap(DpUtils.dp2px(6))
+                .setPageMargin(0)
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
                 .setIndicatorRadius(DpUtils.dp2px(4), DpUtils.dp2px(5)).create(mDrawableList);
     }
@@ -69,6 +72,7 @@ public class IndicatorStyleActivity extends BaseDataActivity {
                 .setIndicatorHeight(DpUtils.dp2px(3f))
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorGap(DpUtils.dp2px(3))
+                .setPageMargin(0)
                 .setIndicatorWidth(DpUtils.dp2px(3), DpUtils.dp2px(10))
                 .setIndicatorColor(Color.parseColor("#888888"),
                         Color.parseColor("#118EEA")).create(mDrawableList);
@@ -80,8 +84,7 @@ public class IndicatorStyleActivity extends BaseDataActivity {
                 .setPageMargin(DpUtils.dp2px(20))
                 .setIndicatorGravity(IndicatorGravity.END)
                 .setIndicatorView(setupIndicatorView(mDrawableList.size()))
-                .setOnPageClickListener(position -> ToastUtils.show(position + ""))
-                .setHolderCreator(ImageResourceViewHolder::new).create(mDrawableList);
+                .setHolderCreator(() -> new ImageResourceViewHolder(0)).create(mDrawableList);
     }
 
     /**

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

@@ -109,7 +109,7 @@ public class NetworkBannerActivity extends RxAppCompatActivity {
                 .setOnPageClickListener(position -> {
                     BannerData bannerData = mBannerViewPager.getList().get(position);
                     Toast.makeText(NetworkBannerActivity.this,
-                            "点击了图片" + position + " " + bannerData.getDesc(), Toast.LENGTH_SHORT).show();
+                            "点击了position:" + position + " " + bannerData.getDesc(), Toast.LENGTH_SHORT).show();
 
                 });
     }

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

@@ -6,7 +6,7 @@ import android.os.Bundle;
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.enums.PageStyle;
+import com.zhpan.bannerview.constants.PageStyle;
 import com.zhpan.bannerview.utils.DpUtils;
 import com.zhpan.idea.utils.ToastUtils;
 
@@ -25,7 +25,7 @@ public class PageStyleActivity extends BaseDataActivity {
         mBannerViewPager
                 .setPageMargin(DpUtils.dp2px(20))
                 .setRevealWidth(DpUtils.dp2px(20))
-                .setHolderCreator(ImageResourceViewHolder::new)
+                .setHolderCreator(() -> new ImageResourceViewHolder(DpUtils.dp2px(5)))
                 .setIndicatorColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
                 .setPageStyle(PageStyle.MULTI_PAGE)
                 .setOnPageClickListener(position -> ToastUtils.show("position:" + position))

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

@@ -61,7 +61,7 @@ public class PageTransformerActivity extends AppCompatActivity {
                 .setScrollDuration(1000)
                 .setHolderCreator(TransformerViewHolder::new)
                 .setOnPageClickListener(position -> Toast.makeText(PageTransformerActivity.this,
-                        "this is item" + mViewpager.getCurrentItem(), Toast.LENGTH_SHORT).show())
+                        "this is item:" + mViewpager.getCurrentItem(), Toast.LENGTH_SHORT).show())
                 .create(getData());
         mViewpager.setPageTransformer(new StackTransformer());
     }

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

@@ -20,7 +20,6 @@ public class CornerImageView extends AppCompatImageView {
 
     public CornerImageView(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
-        setRoundCorner(DpUtils.dp2px(6));
     }
 
     public void setRoundCorner(int radius) {

+ 6 - 5
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/ImageResourceViewHolder.java

@@ -4,13 +4,8 @@ import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
 
 import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.imageloader.ImageLoaderManager;
-import com.example.zhpan.circleviewpager.imageloader.ImageLoaderOptions;
-import com.example.zhpan.circleviewpager.net.BannerData;
 import com.example.zhpan.circleviewpager.view.CornerImageView;
 import com.zhpan.bannerview.holder.ViewHolder;
 
@@ -22,6 +17,11 @@ import com.zhpan.bannerview.holder.ViewHolder;
  */
 public class ImageResourceViewHolder implements ViewHolder<Integer> {
     private CornerImageView mImageView;
+    private int roundCorner;
+
+    public ImageResourceViewHolder(int roundCorner) {
+        this.roundCorner = roundCorner;
+    }
 
     @Override
     public View createView(ViewGroup viewGroup, Context context, int position) {
@@ -33,5 +33,6 @@ public class ImageResourceViewHolder implements ViewHolder<Integer> {
     @Override
     public void onBind(Context context, Integer data, int position, int size) {
         mImageView.setImageResource(data);
+        mImageView.setRoundCorner(roundCorner);
     }
 }

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

@@ -9,7 +9,7 @@
     <com.zhpan.bannerview.BannerViewPager
         android:id="@+id/banner_view_dash"
         android:layout_width="match_parent"
-        android:layout_height="150dp"
+        android:layout_height="180dp"
         android:layout_margin="10dp" />
 
     <RadioGroup

+ 2 - 0
app/src/main/res/layout/activity_page_style.xml

@@ -3,12 +3,14 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     tools:context=".activity.PageStyleActivity">
 
     <com.zhpan.bannerview.BannerViewPager
         android:id="@+id/banner_view"
         android:layout_width="match_parent"
         android:layout_height="180dp"
+        app:bvp_page_style="multi_page"
         android:layout_marginTop="20dp" />
 
 </RelativeLayout>

+ 2 - 1
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"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <com.zhpan.bannerview.BannerViewPager
         android:id="@+id/banner_view"

+ 21 - 12
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -19,10 +19,11 @@ import android.widget.RelativeLayout;
 import com.zhpan.bannerview.annotation.AIndicatorGravity;
 import com.zhpan.bannerview.annotation.AIndicatorSlideMode;
 import com.zhpan.bannerview.annotation.AIndicatorStyle;
+import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.annotation.ATransformerStyle;
 import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.constants.IndicatorStyle;
-import com.zhpan.bannerview.enums.PageStyle;
+import com.zhpan.bannerview.constants.PageStyle;
 import com.zhpan.bannerview.indicator.BaseIndicatorView;
 import com.zhpan.bannerview.indicator.DashIndicatorView;
 import com.zhpan.bannerview.indicator.IIndicator;
@@ -128,7 +129,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     private int indicatorGap;
     private int indicatorHeight;
     private boolean isCustomIndicator;
-    private PageStyle mPageStyle = PageStyle.NORMAL;
+    private int mPageStyle = PageStyle.NORMAL;
 //    private OnPageSelectedListener mOnPageSelectedListener;
 
     public BannerViewPager(Context context) {
@@ -161,6 +162,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         if (attrs != null) {
             TypedArray typedArray =
                     getContext().obtainStyledAttributes(attrs, R.styleable.BannerViewPager);
+
             interval = typedArray.getInteger(R.styleable.BannerViewPager_bvp_interval, 3000);
             indicatorCheckedColor =
                     typedArray.getColor(R.styleable.BannerViewPager_bvp_indicator_checked_color,
@@ -173,13 +175,16 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             indicatorGap = normalIndicatorWidth;
             indicatorHeight = normalIndicatorWidth / 2;
             checkedIndicatorWidth = normalIndicatorWidth;
-            mIndicatorStyle = IndicatorStyle.CIRCLE;
-            mIndicatorSlideMode = IndicatorSlideMode.NORMAL;
+
             isAutoPlay = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_auto_play, true);
             isCanLoop = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_can_loop, true);
-            gravity = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_gravity, 0);
             mPageMargin = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_page_margin, 0);
             mRevealWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_reveal_width, 0);
+
+            gravity = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_gravity, 0);
+            mPageStyle = typedArray.getInt(R.styleable.BannerViewPager_bvp_page_style, 0);
+            mIndicatorStyle = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_style, 0);
+            mIndicatorSlideMode = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_slide_mode, 0);
             typedArray.recycle();
         }
     }
@@ -291,6 +296,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             mViewPager.setAdapter(bannerPagerAdapter);
             mViewPager.setCurrentItem(currentPosition);
             mViewPager.addOnPageChangeListener(this);
+            initPageStyle();
             startLoop();
             setTouchListener();
         } else {
@@ -298,6 +304,14 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     }
 
+    private void initPageStyle(){
+        switch (mPageStyle) {
+            case PageStyle.MULTI_PAGE:
+                setMultiPageStyle();
+                break;
+        }
+    }
+
     @Override
     public void onPageSelected(int position) {
         currentPosition = position;
@@ -695,15 +709,10 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     /**
      * 设置Banner页面样式
      *
-     * @return
+     * @return BannerViewPager
      */
-    public BannerViewPager<T, VH> setPageStyle(PageStyle pageStyle) {
+    public BannerViewPager<T, VH> setPageStyle(@APageStyle int pageStyle) {
         mPageStyle = pageStyle;
-        switch (pageStyle) {
-            case MULTI_PAGE:
-                setMultiPageStyle();
-                break;
-        }
         return this;
     }
 

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

@@ -6,7 +6,8 @@ import androidx.viewpager.widget.PagerAdapter;
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.zhpan.bannerview.enums.PageStyle;
+import com.zhpan.bannerview.annotation.APageStyle;
+import com.zhpan.bannerview.constants.PageStyle;
 import com.zhpan.bannerview.holder.HolderCreator;
 import com.zhpan.bannerview.holder.ViewHolder;
 
@@ -33,7 +34,7 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
         isCanLoop = canLoop;
     }
 
-    private PageStyle mPageStyle;
+    private int mPageStyle;
 
     public BannerPagerAdapter(List<T> list, HolderCreator<VH> holderCreator) {
         this.list = list;
@@ -154,7 +155,7 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
         mPageClickListener = pageClickListener;
     }
 
-    public void setPageStyle(PageStyle pageStyle) {
+    public void setPageStyle(@APageStyle int pageStyle) {
         mPageStyle = pageStyle;
     }
 

+ 23 - 0
bannerview/src/main/java/com/zhpan/bannerview/annotation/APageStyle.java

@@ -0,0 +1,23 @@
+package com.zhpan.bannerview.annotation;
+
+import androidx.annotation.IntDef;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import static com.zhpan.bannerview.constants.PageStyle.MULTI_PAGE;
+import static com.zhpan.bannerview.constants.PageStyle.NORMAL;
+
+/**
+ * <pre>
+ *   Created by zhangpan on 2019-11-06.
+ *   Description:
+ * </pre>
+ */
+@IntDef({NORMAL, MULTI_PAGE})
+@Retention(RetentionPolicy.SOURCE)
+@Target(ElementType.PARAMETER)
+public @interface APageStyle {
+}

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

@@ -0,0 +1,11 @@
+package com.zhpan.bannerview.constants;
+
+/**
+ * <pre>
+ *   Created by zhangpan on 2019-10-18.
+ *   Description:
+ * </pre>
+ */
+public interface PageStyle {
+    int NORMAL = 0, MULTI_PAGE = 1;
+}

+ 0 - 11
bannerview/src/main/java/com/zhpan/bannerview/enums/PageStyle.java

@@ -1,11 +0,0 @@
-package com.zhpan.bannerview.enums;
-
-/**
- * <pre>
- *   Created by zhangpan on 2019-10-18.
- *   Description:
- * </pre>
- */
-public enum PageStyle {
-    NORMAL, MULTI_PAGE
-}

+ 3 - 2
bannerview/src/main/res/values/attrs.xml

@@ -14,8 +14,8 @@
             <enum name="dash" value="1" />
         </attr>
         <attr name="bvp_indicator_slide_mode" format="enum">
-            <enum name="circle" value="0" />
-            <enum name="dash" value="1" />
+            <enum name="normal" value="0" />
+            <enum name="smooth" value="1" />
         </attr>
         <attr name="bvp_indicator_gravity" format="enum">
             <enum name="normal" value="0" />
@@ -31,6 +31,7 @@
             <enum name="stack" value="2" />
             <enum name="accordion" value="3" />
         </attr>
+
         <attr name="bvp_page_margin" format="dimension" />
         <attr name="bvp_reveal_width" format="dimension" />
     </declare-styleable>