Browse Source

fix bug,update readme.

张攀 5 years ago
parent
commit
11edbc293a

+ 12 - 7
README.md

@@ -8,22 +8,27 @@
 |--|--|--|
 | ![嵌套RecyclerView](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview1.gif) | ![自定义页面](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview2.gif) | ![嵌套PhotoView](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview3.gif)   |
 
+## 2.页面滑动样式--支持一屏多页
 
-## 2.设置IndicatorViewStyle
-如果以上样式不能满足你的需求,BannerViewPager还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。下图是一个自定义仿支付宝的Indicator:
+| MULTI_PAGE |
+|--|
+| ![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi.gif) |
+
+## 3.设置IndicatorViewStyle
+BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。下图是一个自定义仿支付宝的Indicator:
 
 | CIRCLE | DASH | 自定义 |
 |--|--|--|
-| ![CIRCLE](https://github.com/zhpanvip/BannerViewPager/blob/v_2.4.0/image/style_circle.gif) | ![DASH](https://github.com/zhpanvip/BannerViewPager/blob/v_2.4.0/image/style_dash.gif) | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/v_2.4.0/image/style_custum.gif) |
+| ![CIRCLE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_circle.gif) | ![DASH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_dash.gif) | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custum.gif) |
 
-## 3.设置IndicatorSlideMode
+## 4.设置IndicatorSlideMode
 
 | NORMAL | SMOOTH |
 |--|--|
 | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/slide_normal.gif) |  ![SMOOTH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/slide_smooth.gif) |
 
 
-## 4.内置Transform样式
+## 5.内置Transform样式
 
 | 参数 | STACK | ROTATE | DEPTH | ACCORDION |
 |--|--|--|--|--|
@@ -57,10 +62,10 @@
 | BannerViewPager<T, VH> setPageTransformerStyle(int style) | 设置页面Transformer内置样式 |  |
 | BannerViewPager<T, VH> setCurrentItem(int item) | Set the currently selected page. | 2.3.5新增 |
 | void getCurrentItem() | 获取当前position | 2.3.5新增 |
-| BannerViewPager<T, VH> setPageStyle(@APageStyle int pageStyle) | 设置页面样式 | 2.4.0新增 可选(MULTI_PAGE)MULTI_PAGE:一屏多页样式 |
+| BannerViewPager<T, VH> setPageStyle(PageStyle pageStyle) | 设置页面样式 | 2.4.0新增 可选(MULTI_PAGE、NORMAL)MULTI_PAGE:一屏多页样式 |
 | BannerViewPager<T, VH> setPageMargin(int pageMargin) | 设置页面间隔 | 2.4.0新增 |
 | void startLoop() |开启自动轮播 | 初始化BannerViewPager时不必调用该方法,设置setAutoPlay后会调用startLoop() |
-| void stopLoop() | 停止自动轮播 | 如果开启自动轮播,为避免内存泄漏需要在onStop()或onDestory中调用此方法 |
+| void stopLoop() | 停止自动轮播 | 如果开启自动轮播,为避免内存泄漏需要在onStop()或onDestroy中调用此方法 |
 | ViewPager getViewPager() | 获取BannerViewPager内部封装的ViewPager |  |
 | List\<T> getList() | 获取Banner中的集合数据 |  |
 | void create(List<T> list) |初始化并构造BannerViewPager  |必须调用,否则前面设置的参数无效  |

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

@@ -7,7 +7,7 @@ import android.os.Bundle;
 import java.util.ArrayList;
 import java.util.List;
 
-public class BaseDataActivity extends AppCompatActivity {
+public abstract class BaseDataActivity extends AppCompatActivity {
     protected List<Integer> mDrawableList = new ArrayList<>();
     @Override
     protected void onCreate(Bundle savedInstanceState) {

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

@@ -43,7 +43,7 @@ public class CustomerBannerPageActivity extends AppCompatActivity {
                 .setHolderCreator(() -> {
                     CustomPageViewHolder customPageViewHolder = new CustomPageViewHolder();
                     customPageViewHolder.setOnSubViewClickListener((view, position) -> Toast.makeText(CustomerBannerPageActivity.this,
-                            "立即体验" + (position + 1), Toast.LENGTH_SHORT).show());
+                            "立即体验" + position, Toast.LENGTH_SHORT).show());
                     return customPageViewHolder;
                 }).create(getData());
     }

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

@@ -66,9 +66,10 @@ public class IndicatorStyleActivity extends BaseDataActivity {
 
     private void setupDashIndicator() {
         mViewPager.setIndicatorStyle(IndicatorStyle.DASH)
-                .setIndicatorHeight(DpUtils.dp2px(2.5f))
+                .setIndicatorHeight(DpUtils.dp2px(3f))
                 .setIndicatorGravity(IndicatorGravity.CENTER)
-                .setIndicatorWidth(DpUtils.dp2px(6), DpUtils.dp2px(12))
+                .setIndicatorGap(DpUtils.dp2px(3))
+                .setIndicatorWidth(DpUtils.dp2px(3), DpUtils.dp2px(10))
                 .setIndicatorColor(Color.parseColor("#888888"),
                         Color.parseColor("#118EEA")).create(mDrawableList);
     }

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

@@ -1,5 +1,6 @@
 package com.example.zhpan.circleviewpager.activity;
 
+import android.graphics.Color;
 import android.os.Bundle;
 
 import com.example.zhpan.circleviewpager.R;
@@ -25,13 +26,9 @@ public class PageStyleActivity extends BaseDataActivity {
                 .setPageMargin(DpUtils.dp2px(20))
                 .setRevealWidth(DpUtils.dp2px(20))
                 .setHolderCreator(ImageResourceViewHolder::new)
+                .setIndicatorColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
                 .setPageStyle(PageStyle.MULTI_PAGE)
-                .setOnPageClickListener(new BannerViewPager.OnPageClickListener() {
-                    @Override
-                    public void onPageClick(int position) {
-                        ToastUtils.show("点击了第"+position+"张图片");
-                    }
-                })
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .create(mDrawableList);
     }
 

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

@@ -0,0 +1,32 @@
+package com.example.zhpan.circleviewpager.view;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+
+import androidx.appcompat.widget.AppCompatImageView;
+
+import com.zhpan.bannerview.provider.ViewStyleSetter;
+import com.zhpan.bannerview.utils.DpUtils;
+
+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);
+        setRoundCorner(DpUtils.dp2px(6));
+    }
+
+    public void setRoundCorner(int radius) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
+            viewStyleSetter.setRoundCorner(radius);
+        }
+    }
+}

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

@@ -11,6 +11,7 @@ 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;
 
 /**
@@ -20,7 +21,7 @@ import com.zhpan.bannerview.holder.ViewHolder;
  * </pre>
  */
 public class ImageResourceViewHolder implements ViewHolder<Integer> {
-    private ImageView mImageView;
+    private CornerImageView mImageView;
 
     @Override
     public View createView(ViewGroup viewGroup, Context context, int position) {

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

@@ -3,7 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
-    <ImageView
+    <com.example.zhpan.circleviewpager.view.CornerImageView
         android:id="@+id/banner_image"
         android:layout_width="match_parent"
         android:layout_height="match_parent"

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

@@ -354,7 +354,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
                 }
             } else {
                 if (position == 0) {
-                    return mList.size() - 2;
+                    return mList.size() == 1 ? 0 : mList.size() - 2;
                 } else if (position == 1) {
                     return mList.size() - 1;
                 } else if (position == mList.size() + 3) {
@@ -372,7 +372,15 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     }
 
     private int toUnrealPosition(int position) {
-        return isCanLoop ? (position < mList.size()) ? (++position) : mList.size() : position;
+        if (isCanLoop) {
+            if (mPageStyle == PageStyle.NORMAL) {
+                return (position < mList.size()) ? (++position) : mList.size();
+            } else {
+                return (position < mList.size()) ? position + 2 : mList.size() + 1;
+            }
+        } else {
+            return position;
+        }
     }
 
 

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

@@ -105,22 +105,22 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
                         holder.onBind(container.getContext(), list.get(position - 1), position - 1, size);
                     }
                 } else {
-                    if (position == 0) {
-                        view = holder.createView(container, container.getContext(), list.size() - 2);
-                        holder.onBind(container.getContext(), list.get(list.size() - 2), list.size() - 2, size);
-                    } else if (position == 1) {
-                        view = holder.createView(container, container.getContext(), list.size() - 1);
-                        holder.onBind(container.getContext(), list.get(list.size() - 1), list.size() - 1, size);
-                    } else if (position == size+2) {
-                        view = holder.createView(container, container.getContext(), 0);
-                        holder.onBind(container.getContext(), list.get(0), 0, size);
-                    } else if (position == size + 3) {
-                        view = holder.createView(container, container.getContext(), 1);
-                        holder.onBind(container.getContext(), list.get(1), 1, size);
-                    } else {
-                        view = holder.createView(container, container.getContext(), position - 2);
-                        holder.onBind(container.getContext(), list.get(position - 2), position - 2, size);
-                    }
+                        if (position == 0) {
+                            view = holder.createView(container, container.getContext(), list.size() - 2);
+                            holder.onBind(container.getContext(), list.get(list.size() - 2), list.size() - 2, size);
+                        } else if (position == 1) {
+                            view = holder.createView(container, container.getContext(), list.size() - 1);
+                            holder.onBind(container.getContext(), list.get(list.size() - 1), list.size() - 1, size);
+                        } else if (position == size + 2) {
+                            view = holder.createView(container, container.getContext(), 0);
+                            holder.onBind(container.getContext(), list.get(0), 0, size);
+                        } else if (position == size + 3) {
+                            view = holder.createView(container, container.getContext(), 1);
+                            holder.onBind(container.getContext(), list.get(1), 1, size);
+                        } else {
+                            view = holder.createView(container, container.getContext(), position - 2);
+                            holder.onBind(container.getContext(), list.get(position - 2), position - 2, size);
+                        }
                 }
 
             } else {

BIN
image/page_style_multi.gif