Skip to content

Commit

Permalink
add some new attrs. (#23)
Browse files Browse the repository at this point in the history
* add some new attrs.

* fix readme.
  • Loading branch information
zhpanvip authored Nov 13, 2019
1 parent c7f6a4e commit 099a5ef
Show file tree
Hide file tree
Showing 9 changed files with 73 additions and 33 deletions.
30 changes: 24 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,25 @@

## 效果预览

### [扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/raw/master/download/app.apk)
### [点击或扫描二维码下载apk](https://github.com/zhpanvip/BannerViewPager/raw/master/download/app.apk)

![扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/image/qrcode.png)


### 1.setPageStyle--支持一屏多页
### 1.setPageStyle

[一屏多页Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java)

| MULTI_PAGE |MULTI_PAGE_SCALE | MULTI_PAGE_OVERLAP |
|--|--|--|
| ![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_scale.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_overlay.gif) |

### 2.setIndicatorViewStyle
### 2.setIndicatorStyle
BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。

[IndicatorViewStyle Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java)

| CIRCLE | DASH | 自定义 |
| CIRCLE | DASH | Custom |
|--|--|--|
| ![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) |

Expand Down Expand Up @@ -57,7 +57,7 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
| BannerViewPager<T, VH> setRoundCorner(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> showIndicator(boolean showIndicator) | 是否显示指示器|默认值true |
| BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator vibility |默认值VISIBLE 2.4.2 新增|
| BannerViewPager<T, VH> setIndicatorStyle(int indicatorStyle) | 设置指示器样式 | 可选枚举(CIRCLE, DASH) 默认CIRCLE |
| BannerViewPager<T, VH> setIndicatorGravity(int gravity) | 指示器位置 |可选值(CENTER、START、END)默认值CENTER |
| BannerViewPager<T, VH> setIndicatorColor(int normalColor,int checkedColor) | 指示器圆点颜色 |normalColor:未选中时颜色默认"#8C6C6D72", checkedColor:选中时颜色 默认"#8C18171C" |
Expand All @@ -77,10 +77,28 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
| BannerViewPager<T, VH> setIndicatorMargin(int left, int top, int right, int bottom) | 设置Indicator边距 | 2.4.1新增 |
| void startLoop() |开启自动轮播 | 初始化BannerViewPager时不必调用该方法,设置setAutoPlay后会调用startLoop() |
| void stopLoop() | 停止自动轮播 | 如果开启自动轮播,为避免内存泄漏需要在onStop()或onDestroy中调用此方法 |
| ViewPager getViewPager() | 获取BannerViewPager内部封装的ViewPager | |
| List\<T> getList() | 获取Banner中的集合数据 | |
| void create(List<T> list) |初始化并构造BannerViewPager |必须调用,否则前面设置的参数无效 |

### xml支持的attrs
| Attributes | format | description |
|--|--|--|
| bvp_interval | integer | 自动轮播事件间隔 |
| bvp_scroll_duration | integer | 页面切换时滑动时间|
| bvp_can_loop | boolean| 是否循环 |
| bvp_auto_play | boolean | 是否自动播放 |
| bvp_indicator_checked_color | color | indicator选中时颜色 |
| bvp_indicator_normal_color | color | indicator未选中时颜色 |
| bvp_indicator_radius | dimension | indicator圆点半径或者Dash模式的1/2宽度 |
| bvp_round_corner| dimension | Banner圆角大小 |
| bvp_page_margin | dimension | 页面item间距 |
| bvp_reveal_width | dimension | 一屏多页模式下两边item漏出的宽度 |
| bvp_indicator_style | enum | indicator样式(circle/dash) |
| bvp_indicator_slide_mode | enum | indicator滑动模式(normal/smooth) |
| bvp_indicator_gravity | enum | indicator位置(center/start/end) |
| bvp_page_style | enum | page样式(normal/multi_page/multi_page_overlap/multi_page_scale) |
| bvp_transformer_style | enum | transform样式(normal/depth/stack/accordion) |
| bvp_indicator_visibility| enum | indicator visibility(visible/gone/invisible) |


## 如何使用
Expand Down
Binary file removed apk/app.apk
Binary file not shown.
Binary file removed apk/key
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_indicator_slide_mode);
setTitle(getString(R.string.indicator_style));
mViewPager = findViewById(R.id.banner_view_dash);
mViewPager.setRoundCorner(DpUtils.dp2px(8))
.setIndicatorGap(DpUtils.dp2px(6))
mViewPager.setIndicatorGap(DpUtils.dp2px(6))
.setHolderCreator(() -> new ImageResourceViewHolder(0));
initRadioGroup();
}
Expand Down
5 changes: 4 additions & 1 deletion app/src/main/res/layout/activity_indicator_slide_mode.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
Expand All @@ -10,7 +11,9 @@
android:id="@+id/banner_view_dash"
android:layout_width="match_parent"
android:layout_height="180dp"
android:layout_margin="10dp" />
android:layout_margin="10dp"
app:bvp_indicator_visibility="visible"
app:bvp_round_corner="8dp" />

<RadioGroup
android:id="@+id/rg_indicator_style"
Expand Down
47 changes: 27 additions & 20 deletions bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import androidx.viewpager.widget.ViewPager;

import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
Expand Down Expand Up @@ -47,6 +46,7 @@
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;

/**
* Created by zhpan on 2017/3/28.
Expand All @@ -64,7 +64,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im

private boolean isAutoPlay = false;

private int gravity;
private int indicatorGravity;

private int indicatorNormalColor;

Expand Down Expand Up @@ -121,6 +121,9 @@ public void run() {
}
}
};
private int mIndicatorVisibility;
private int mScrollDuration;
private int mRoundCorner;

public BannerViewPager(Context context) {
this(context, null);
Expand Down Expand Up @@ -161,26 +164,27 @@ private void initValues(AttributeSet attrs) {
Color.parseColor("#8C6C6D72"));
normalIndicatorWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_indicator_radius,
DpUtils.dp2px(8));

indicatorGap = normalIndicatorWidth;
indicatorHeight = normalIndicatorWidth / 2;
checkedIndicatorWidth = normalIndicatorWidth;

isAutoPlay = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_auto_play, true);
isCanLoop = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_can_loop, true);
mPageMargin = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_page_margin, 0);
mRoundCorner = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_round_corner, 0);
mRevealWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_reveal_width, 0);

gravity = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_gravity, 0);
indicatorGravity = 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);
mIndicatorVisibility = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_visibility, 0);
mScrollDuration = typedArray.getInt(R.styleable.BannerViewPager_bvp_scroll_duration, 800);
typedArray.recycle();
}
}

/**
* 初始化IndicatorView及ViewPager
*/
private void initData() {
if (mList.size() > 0) {
if (mList.size() > 1) {
Expand Down Expand Up @@ -212,7 +216,6 @@ private BaseIndicatorView getIndicatorView() {
return indicatorView;
}


/**
* 设置触摸事件,当滑动或者触摸时停止自动轮播
*/
Expand All @@ -237,18 +240,16 @@ private void setTouchListener() {
});
}

/**
* 构造指示器
*/
private void initIndicator(IIndicator indicatorView) {
mRelativeLayout.setVisibility(mIndicatorVisibility);
mIndicatorView = indicatorView;
if (((View) indicatorView).getParent() == null) {
mRelativeLayout.removeAllViews();
mRelativeLayout.addView((View) indicatorView);
setIndicatorViewMargin();
RelativeLayout.LayoutParams layoutParams =
(RelativeLayout.LayoutParams) ((View) indicatorView).getLayoutParams();
switch (gravity) {
switch (indicatorGravity) {
case CENTER:
layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
break;
Expand Down Expand Up @@ -286,18 +287,24 @@ private void setupViewPager() {
mViewPager.setAdapter(bannerPagerAdapter);
mViewPager.setCurrentItem(currentPosition);
mViewPager.addOnPageChangeListener(this);
mViewPager.setScrollDuration(mScrollDuration);
initPageStyle();
startLoop();
setTouchListener();
} else {
throw new NullPointerException("You must set HolderCreator for BannerViewPager");
}

if (mRoundCorner > 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
viewStyleSetter.setRoundCorner(mRoundCorner);
}
}

private void initPageStyle() {
switch (mPageStyle) {
case PageStyle.MULTI_PAGE:
setMultiPageStyle(false, 0.999f);
setMultiPageStyle(false, MAX_SCALE);
break;
case PageStyle.MULTI_PAGE_OVERLAP:
setMultiPageStyle(true, DEFAULT_MIN_SCALE);
Expand All @@ -312,7 +319,7 @@ private void setMultiPageStyle(boolean overlap, float scale) {
mPageMargin = mPageMargin == 0 ? DpUtils.dp2px(20) : mPageMargin;
mRevealWidth = mRevealWidth == 0 ? DpUtils.dp2px(20) : mRevealWidth;
setClipChildren(false);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mViewPager.getLayoutParams();
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mViewPager.getLayoutParams();
params.leftMargin = mPageMargin + mRevealWidth;
params.rightMargin = mPageMargin + mRevealWidth;
mViewPager.setOverlapStyle(overlap);
Expand Down Expand Up @@ -449,10 +456,7 @@ public BannerViewPager<T, VH> setHolderCreator(HolderCreator<VH> holderCreator)
* @param radius 圆角大小
*/
public BannerViewPager<T, VH> setRoundCorner(int radius) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
viewStyleSetter.setRoundCorner(radius);
}
mRoundCorner = radius;
return this;
}

Expand Down Expand Up @@ -525,7 +529,7 @@ public BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageC
* @param scrollDuration page滚动时间
*/
public BannerViewPager<T, VH> setScrollDuration(int scrollDuration) {
mViewPager.setScrollDuration(scrollDuration);
mScrollDuration = scrollDuration;
return this;
}

Expand Down Expand Up @@ -616,7 +620,7 @@ public BannerViewPager<T, VH> showIndicator(boolean showIndicator) {
}

public BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) {
mRelativeLayout.setVisibility(visibility);
mIndicatorVisibility = visibility;
return this;
}

Expand All @@ -629,7 +633,7 @@ public BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility)
* {@link com.zhpan.bannerview.constants.IndicatorGravity#END}
*/
public BannerViewPager<T, VH> setIndicatorGravity(@AIndicatorGravity int gravity) {
this.gravity = gravity;
this.indicatorGravity = gravity;
return this;
}

Expand Down Expand Up @@ -741,6 +745,9 @@ public BannerViewPager<T, VH> setPageMargin(int pageMargin) {
return this;
}

/**
* @param revealWidth 一屏多页模式下两边页面显露出来的宽度
*/
public BannerViewPager<T, VH> setRevealWidth(int revealWidth) {
mRevealWidth = revealWidth;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public class ScaleInTransformer extends BasePageTransformer {

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() {
Expand Down
20 changes: 16 additions & 4 deletions bannerview/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
<declare-styleable name="BannerViewPager">
<!--页面切换时间间隔-->
<attr name="bvp_interval" format="integer" />
<attr name="bvp_scroll_duration" format="integer" />
<attr name="bvp_can_loop" format="boolean" />
<attr name="bvp_auto_play" format="boolean" />
<!--<attr name="indicator_gravity" format="integer"/>-->
<attr name="bvp_indicator_checked_color" format="color" />
<attr name="bvp_indicator_normal_color" format="color" />
<attr name="bvp_indicator_radius" format="dimension" />
<attr name="bvp_round_corner" format="dimension" />
<attr name="bvp_page_margin" format="dimension" />
<attr name="bvp_reveal_width" format="dimension" />

<attr name="bvp_indicator_style" format="enum">
<enum name="circle" value="0" />
<enum name="dash" value="1" />
Expand All @@ -18,12 +23,15 @@
<enum name="smooth" value="1" />
</attr>
<attr name="bvp_indicator_gravity" format="enum">
<enum name="normal" value="0" />
<enum name="smooth" value="1" />
<enum name="center" value="0" />
<enum name="start" value="1" />
<enum name="end" value="2" />
</attr>
<attr name="bvp_page_style" format="enum">
<enum name="normal" value="0" />
<enum name="multi_page" value="1" />
<enum name="multi_page_overlap" value="2" />
<enum name="multi_page_scale" value="3" />
</attr>
<attr name="bvp_transformer_style" format="enum">
<enum name="normal" value="0" />
Expand All @@ -32,8 +40,12 @@
<enum name="accordion" value="3" />
</attr>

<attr name="bvp_page_margin" format="dimension" />
<attr name="bvp_reveal_width" format="dimension" />
<attr name="bvp_indicator_visibility" format="enum">
<enum name="visible" value="0" />
<enum name="invisible" value="4" />
<enum name="gone" value="8" />/>
</attr>

</declare-styleable>

</resources>
Binary file modified download/app.apk
Binary file not shown.

0 comments on commit 099a5ef

Please sign in to comment.