Android轮播控件

全新升级,基于ViewPager2实现无限轮播功能。可以自定义indicator,需自定义实现 Indicator 接口,内置了的IndicatorView,支持五种动画切换。支持传入RecyclerView.Adapter 即可实现无限轮播,支持任何ReyclerView.Apdater框架,集成使用请参考Sample。

  • 支持自动轮播
  • 支持一屏三页
  • 支持自定义Indicator
  • 支持自定义view
  • 支持数据刷新
  • 支持垂直滚动
  • 支持任意RecyclerView.adapter,RecyclerView的使用方式。
  • 良好的代码封装,更多优化请参考代码实现。

项目地址前往项目地址

效果图

点击下载 banner.apk 体验


基本使用的功能,请下载apk体验更流畅
描述 普通样式 两边缩放
一屏三页
IndicatorView IndicatorStyle
INDICATOR_CIRCLE INDICATOR_CIRCLE_RECT
INDICATOR_BEZIER INDICATOR_DASH
INDICATOR_BIG_CIRCLE
效果图 1 2
收集更多的效果
Indicator查看simple代码

使用步骤

Step 1.依赖banner

项目地址前往项目地址

项目地址前往项目地址

项目地址前往项目地址

Step 2.xml

     <com.to.aboomy.pager2.Banner        android:id="@+id/banner"        android:layout_width="match_parent"        android:layout_height="150dp"/>

Step 3.自定义RecyclerView.Adapter

//自定义adapterpublic class ImageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>  //或者使用其他三方框架,都是支持的,如:BRVAHpublic class ImageAdapter extends BaseQuickAdapter<String, BaseViewHolder> {    public ImageAdapter() {        super(R.layout.item_image);    }    @Override    protected void convert(@NonNull BaseViewHolder helper, String item) {        Glide.with(mContext)                .load(item)                .into((ImageView) helper.getView(R.id.img));    }}

Step 4.在页面中使用Banner

 @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        banner = findViewById(R.id.banner);                //使用内置Indicator        IndicatorView indicator = new IndicatorView(this)              .setIndicatorColor(Color.DKGRAY)              .setIndicatorSelectorColor(Color.WHITE);                //创建adapter          ImageAdapter adapter = new ImageAdapter();                    //传入RecyclerView.Adapter 即可实现无限轮播         banner.setIndicator(indicator)              .setAdapter(adapter);    }

简单设置一屏三页效果

//设置左右页面露出来的宽度及item与item之间的宽度.setPageMargin(UIUtil.dip2px(this, 20), UIUtil.dip2px(this, 10))//内置ScaleInTransformer,设置切换缩放动画.setPageTransformer(true, new ScaleInTransformer())    

###

关于ViewPager切换动画

Sample中集成了以下两个ViewPager切换动画,请运行Sample查看动画效果,参考需要的ViewPagerTransform放到项目中,或者根据需求进行自定义。

ViewPagerTransforms

MagicViewPager

如何自定义Indicator

/** * 可以实现该接口,自定义Indicator 可参考内置的{@link IndicatorView} */public interface Indicator {    /**     * 当数据初始化完成时调用     *     * @param pagerCount pager数量     */    void initIndicatorCount(int pagerCount);    /**     * 返回一个View,添加到banner中     */    View getView();    /**     * banner是一个RelativeLayout,设置banner在RelativeLayout中的位置,可以是任何地方     */    RelativeLayout.LayoutParams getParams();        void onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels);        void onPageSelected(int position);        void onPageScrollStateChanged(int state);}//举个栗子public class IndicatorView extends View implements Indicator{               @Override        public void initIndicatorCount(int pagerCount) {            this.pagerCount = pagerCount;            setVisibility(pagerCount > 1 ? VISIBLE : GONE);            requestLayout();        }            @Override        public View getView() {            return this;        }         /**          * 控制Indicator在Banner中的位置,开发者自行实现          */        @Override        public RelativeLayout.LayoutParams getParams() {            if (params == null) {                params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);                params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);                params.addRule(RelativeLayout.CENTER_HORIZONTAL);                params.bottomMargin = dip2px(10);            }            return params;        }        /**          * banner切换时同步回调的三个方法          */        @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            selectedPage = position;            offset = positionOffset;            invalidate();        }                @Override        public void onPageSelected(int position) {        }                @Override        public void onPageScrollStateChanged(int state) {        }}

Banner提供的方法介绍,banner未提供任何自定义属性

|方法名|描述|
|—|---| 
|setPageTransformer(ViewPager2.PageTransformer transformer)|设置viewpager2的自定义动画,支持多个添加|
setOuterPageChangeListener(ViewPager2.OnPageChangeCallback listener)|设置viewpager2的滑动监听
|setAutoTurningTime(long autoTurningTime)|设置自动轮播时长
|setAutoPlay(boolean autoPlay)|设置是否自动轮播,大于1页可以轮播
|setIndicator(Indicator indicator)|设置indicator
|setIndicator(Indicator indicator, boolean attachToRoot)|设置indicator
|setAdapter(@Nullable RecyclerView.Adapter adapter)|加载数据,此方法时开始轮播的方法,请再最后调用
|setAdapter(@Nullable RecyclerView.Adapter adapter, int startPosition)|重载方法,设置轮播的起始位置
|isAutoPlay()|是否无限轮播
|getCurrentPager()|获取viewPager2当前位置
|startTurning()|开始轮播
|stopTurning()|停止轮播
|setPageMargin(int multiWidth, int pageMargin)|设置一屏多页
|setPageMargin(int leftWidth, int rightWidth, int pageMargin)|设置一屏多页,方法重载
|setOffscreenPageLimit(int limit)|同viewPager2用法
|setOrientation(@ViewPager2.Orientation int orientation)|设置viewpager2滑动方向|
|ViewPager2 getViewPager2()|获取viewpager2|
|RecyclerView.Adapter getAdapter()|获取apdater|
|||

内置IndicatorView使用方法介绍,没有提供任何自定义属性

方法名 描述
setIndicatorRadius(float indicatorRadius) 设置圆点半径
setIndicatorSpacing(float indicatorSpacing) 设置圆点间距
setIndicatorStyle(@IndicatorStyle int indicatorStyle) 设置圆点切换动画,内置五种切换动画,请参考Sample
setIndicatorColor(@ColorInt int indicatorColor) 设置默认的圆点颜色
setIndicatorSelectorColor(@ColorInt int indicatorSelectorColor) 设置选中的圆点颜色
setParams(RelativeLayout.LayoutParams params) 设置IndicatorView在banner中的位置,默认底部居中,距离底部10dp,请参考Sample
setIndicatorRatio(float indicatorRatio) 设置indicator比例,拉伸圆为矩形,设置越大,拉伸越长,默认1.0
setIndicatorSelectedRadius(float indicatorSelectedRadius) 设置选中的圆角,默认和indicatorRadius值一致,可单独设置选中的点大小
setIndicatorSelectedRatio(float indicatorSelectedRatio) 设置选中圆比例,拉伸圆为矩形,控制该比例,默认比例和indicatorRatio一致,默认值1.0

总结

xiexie ni de guāng gù ! 喜欢的朋友轻轻右上角赏个star,您的鼓励会给我持续更新的动力。

更多相关文章

  1. 用Eclipse开发Android项目(转)
  2. android各module的依赖版本统一
  3. Android(安卓)Dialog 设置圆角无效
  4. android bluedroid调试
  5. Notification探险
  6. android 通过jdbc访问mysql数据库--(含android studio 配置)通过测
  7. Android(安卓)Design Library之四:BottomSheetDialog
  8. Android布局之二——Relative Layout
  9. 【攻克Android(安卓)(43)】WebView (网络视图)

随机推荐

  1. Android UI学习 - TableLayout
  2. Android(安卓)软键盘的监听(监听高度,是否
  3. Android(安卓)多点触摸 multi-touch
  4. Android studio 使用心得(十)---android
  5. Activity启动模式记录
  6. Android为数据存储提供几种方式
  7. Dev-Guide_Android Basics_What is Andro
  8. android sdk更新后出现please update ADT
  9. Android Permission denied 错误(附Andro
  10. Android stuio在MainActivity中运行java