Không có mô tả

张攀 2bfc748dbb Merge remote-tracking branch 'origin/master' 5 năm trước cách đây
app f705bab68e Optimize code,update readme. 5 năm trước cách đây
bannerview 5a9ec3fe9b update version 5 năm trước cách đây
gradle 25bc0350b3 update gradle version to 5.4.1 5 năm trước cách đây
ideahttp 88c09a7271 Migrate to androidx 5 năm trước cách đây
image f705bab68e Optimize code,update readme. 5 năm trước cách đây
.gitignore 8fce1800a5 Initial commit 8 năm trước cách đây
README.md 2bfc748dbb Merge remote-tracking branch 'origin/master' 5 năm trước cách đây
build.gradle d95804abaf Optimize BannerViewPager,update readme 5 năm trước cách đây
gradle.properties 88c09a7271 Migrate to androidx 5 năm trước cách đây
gradlew 7cd1aff3e4 add Annotation for IndicatorGravity 5 năm trước cách đây
gradlew.bat 8fce1800a5 Initial commit 8 năm trước cách đây
settings.gradle 9ba615c084 Fix a bug,that Banner can't display when get data from server. 5 năm trước cách đây

README.md

效果预览

1.基础功能

| 嵌套RecyclerView | 自定义页面 | 嵌套PhotoView | |--|--|--| | 嵌套RecyclerView | 自定义页面 | 嵌套PhotoView |

2.自定义Indicator滑动样式

| NORMAL | SMOOTH | |--|--| | NORMAL | SMOOTH |

3.内置Transform样式

| 参数 | STACK | ROTATE | DEPTH | ACCORDION | |--|--|--|--|--| | 预览 | STACK | ROTATE_DOWN | DEPTH |ACCORDION |

开放API

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

如何使用

1.gradle中添加依赖

latestVersion is: latestVersion

如果您已迁移到AndroidX请使用2.2.0以上版本

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

如果未迁移到AndroidX请使用:

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

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

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

3.自定义ViewHolder

public class NetViewHolder implements ViewHolder<BannerData> {
    private ImageView mImageView;
    private TextView mTextView;

    @Override
    public View createView(ViewGroup viewGroup, Context context, int position) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_net, viewGroup, false);
        mImageView = view.findViewById(R.id.banner_image);
        mTextView = view.findViewById(R.id.tv_describe);
        return view;
    }

    @Override
    public void onBind(Context context, BannerData data, int position, int size) {
        ImageLoaderOptions options = new ImageLoaderOptions.Builder().into(mImageView).load(data.getImagePath()).placeHolder(R.drawable.placeholder).build();
        ImageLoaderManager.getInstance().loadImage(options);
        mTextView.setText(data.getTitle());
    }
}

4.BannerViewPager参数配置

    private BannerViewPager<BannerData, NetViewHolder> mBannerViewPager;
    ...
	private void initViewPager() {
             mBannerViewPager = findViewById(R.id.banner_view);
             mBannerViewPager.showIndicator(true)
                            .setInterval(3000)
                            .setRoundCorner(7f)
                            .setIndicatorColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
                            .setIndicatorGravity(BannerViewPager.END)
                            .setScrollDuration(1000).setHolderCreator(NetViewHolder::new)
                            .setOnPageClickListener(position -> {
                                BannerData bannerData = mBannerViewPager.getList().get(position);
                                Toast.makeText(NetworkBannerActivity.this,
                                        "点击了图片" + position + " " + bannerData.getDesc(), Toast.LENGTH_SHORT).show();

                            }).create(mList);
        }

5.开启与停止轮播

如果开启了自动轮播功能,请务必在onDestroy中停止轮播,以免出现内存泄漏。

	@Override
    protected void onDestroy() {
        super.onDestroy();
        if (mBannerViewPager != null)
    		mViewpager.stopLoop();
    }

为了节省性能也可以在onPause中停止轮播,在onResume中开启轮播:

    @Override
    protected void onPause() {
        super.onPause();
        if (mBannerViewPager != null)
            mBannerViewPager.stopLoop();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mBannerViewPager != null)
            mBannerViewPager.startLoop();
    }

TODO 版本计划

(1)优化及重构IndicatorView(2.0.1)

(2)修复2.1.0以前版本循环滑动时第一张切换卡顿问题 (2.1.0.1)

(3)增加页面滑动动画(2.1.2)

(4)迁移AndroidX(2.2.0)

(5)增加IndicatorView的滑动样式(2.2.2)

(6)增添更多Indicator滑动模式(2.3.+)

(7)ViewPager更换为ViewPager2 (3.0.0)

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

详情请点击此处