Sen descrición

张攀 25bc0350b3 update gradle version to 5.4.1 %!s(int64=5) %!d(string=hai) anos
app 25bc0350b3 update gradle version to 5.4.1 %!s(int64=5) %!d(string=hai) anos
bannerview 25bc0350b3 update gradle version to 5.4.1 %!s(int64=5) %!d(string=hai) anos
gradle 25bc0350b3 update gradle version to 5.4.1 %!s(int64=5) %!d(string=hai) anos
ideahttp 88c09a7271 Migrate to androidx %!s(int64=5) %!d(string=hai) anos
image 2f7cd4e255 add recyclerview demo %!s(int64=5) %!d(string=hai) anos
.gitignore 8fce1800a5 Initial commit %!s(int64=8) %!d(string=hai) anos
README.md 2f7cd4e255 add recyclerview demo %!s(int64=5) %!d(string=hai) anos
build.gradle 25bc0350b3 update gradle version to 5.4.1 %!s(int64=5) %!d(string=hai) anos
gradle.properties 88c09a7271 Migrate to androidx %!s(int64=5) %!d(string=hai) anos
gradlew 7cd1aff3e4 add Annotation for IndicatorGravity %!s(int64=5) %!d(string=hai) anos
gradlew.bat 8fce1800a5 Initial commit %!s(int64=8) %!d(string=hai) anos
settings.gradle 9ba615c084 Fix a bug,that Banner can't display when get data from server. %!s(int64=5) %!d(string=hai) anos

README.md

效果预览

这里写图片描述

开放API

| 方法名 | 方法描述 | 说明 | |--|--|--| | startLoop() |开启自动轮播 | | | stopLoop() | 停止自动轮播 | | | setInterval(int interval) | 自动轮播事件间隔 |单位毫秒,默认值3000 | | setCanLoop(boolean canLoop) | 是否可以循环 | 默认值true| | setRoundCorner(@DimenRes int radius) | 设置圆角 |默认无圆角 需要SDK_INT>=LOLLIPOP(21) | | setRoundCorner(float radiusDp) | 设置圆角 | 单位dp,默认无圆角 需要SDK_INT>=LOLLIPOP(21)| | showIndicator(boolean showIndicator) | 是否显示指示器|默认值true | | setIndicatorGravity(int gravity) | 指示器位置(0 Center、1 Start、2 End) |默认值0 Center | | setIndicatorColor(int normalColor,int checkedColor) | 指示器圆点颜色 |normalColor:未选中时颜色默认"#000000", checkedColor:选中时颜色 默认"#FFFFFF" | | setIndicatorRadius(float radiusDp) | 指示器圆点半径 | 单位dp 默认值4dp| | setIndicatorRadius(@DimenRes int radiusRes) | 指示器圆点半径| DimenRes资源 默认值4dp| | setCurrentItem(final int position) | 切换到第position个页面| | | setCurrentItem(final int position, final boolean smoothScroll) | 平滑切换到第position个页面 | | | setData(List list) |设置Banner数据 | | | setHolderCreator(HolderCreator holderCreator) |设置HolderCreator |必须设置HolderCreator,否则会抛出RuntimeException | | BannerViewPager setPageTransformer(ViewPager.PageTransformer transformer) |设置transformer |2.1.2新增 | | BannerViewPager setPageTransformerStyle(TransformerStyle style) |内置transformer样式 |2.1.2新增 可选参数(DEPTH, ROTATE_DOWN, STACK, ACCORDION) | | create() |初始化并构造BannerViewPager |必须调用,否则前面设置的参数无效 |

Transform内置样式 | 参数 | 预览 | |--|--| | STACK | STACK | | ROTATE_DOWN | ROTATE_DOWN | | DEPTH | DEPTH | | ACCORDION | ACCORDION |

如何使用

Download

gradle中添加依赖

implementation 'com.zhpan.library:bannerview:latestVersion'

在xml文件中添加如下代码:

    <com.zhpan.bannerview.BannerViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_margin="10dp" />

BannerViewPager参数配置

	private void initViewPager() {
            mViewpager = findViewById(R.id.viewpager);
            mViewpager.showIndicator(true)
                    .setInterval(3000)
                    .setRoundCorner(R.dimen.banner_corner)
                    .setScrollDuration(1000)
                    .setData(mDataList)
                    .setHolderCreator(new HolderCreator<DataViewHolder>() {
                        @Override
                        public DataViewHolder createViewHolder() {
                            return new DataViewHolder();
                        }
                    })
                    .setOnPageClickListener(new BannerViewPager.OnPageClickListener() {
                        @Override
                        public void onPageClick(int position) {
                            Toast.makeText(ViewPagerActivity.this, "点击了图片" + position, Toast.LENGTH_SHORT).show();
                        }
                    }).create();
        }

自定义ViewHolder

public class DataViewHolder implements ViewHolder<DataBean> {
    private ImageView mImageView;

    @Override
    public View createView(ViewGroup viewGroup, Context context, int position) {
        // 返回页面布局文件
        View view = LayoutInflater.from(context).inflate(R.layout.item_view, viewGroup, false);
        mImageView = view.findViewById(R.id.banner_image);
        return view;
    }

    @Override
    public void onBind(final Context context, DataBean data, final int position, final int size) {
        ImageLoaderUtil.loadImg(mImageView, data.getUrl(), R.drawable.placeholder);
    }
}

为防止内存泄露在onDestroy()中停止图片轮播

	@Override
    protected void onDestroy() {
    	mViewpager.stopLoop();
        super.onDestroy();
    }

TODO 接下来的版本计划

(1)目前版本循环滑动时会出现偶尔划不动的情况,会在后续版本中修复 (2.1.0.1 已修复)

(2)增加页面滑动动画。(2.1.2 已添加)

(3)迁移AndroidX

(4)优化及重构IndicatorView,增加IndicatorView的滑动样式。

(5)ViewPager更换为ViewPager2

(6)如有问题欢迎提issue,该库会持续更新优化。

详情请点击此处