广告图片轮播控件框架很多,今天介绍几款常用的
1.banner
在布局文件中添加Banner,可以设置自定义属性
!!!此步骤可以省略,可以直接在Activity或者Fragment中new Banner();
<com.youth.banner.Banner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="高度自己设置" />
继承BannerAdapter,和RecyclerView的Adapter一样
/**
* 自定义布局,下面是常见的图片样式,更多实现可以看demo,可以自己随意发挥
*/
public class ImageAdapter extends BannerAdapter<DataBean, ImageAdapter.BannerViewHolder> {
public ImageAdapter(List<DataBean> mDatas) {
//设置数据,也可以调用banner提供的方法,或者自己在adapter中实现
super(mDatas);
}
//创建ViewHolder,可以用viewType这个字段来区分不同的ViewHolder
@Override
public BannerViewHolder onCreateHolder(ViewGroup parent, int viewType) {
ImageView imageView = new ImageView(parent.getContext());
//注意,必须设置为match_parent,这个是viewpager2强制要求的
imageView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
return new BannerViewHolder(imageView);
}
@Override
public void onBindView(BannerViewHolder holder, DataBean data, int position, int size) {
holder.imageView.setImageResource(data.imageRes);
}
class BannerViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public BannerViewHolder(@NonNull ImageView view) {
super(view);
this.imageView = view;
}
}
}
Banner具体方法调用
public class BannerActivity extends AppCompatActivity {
public void useBanner() {
//--------------------------简单使用-------------------------------
//创建(new banner())或者布局文件中获取banner
Banner banner = (Banner) findViewById(R.id.banner);
//默认直接设置adapter就行了
banner.setAdapter(new BannerExampleAdapter(DataBean.getTestData()));
//--------------------------详细使用-------------------------------
banner.setAdapter(new BannerExampleAdapter(DataBean.getTestData()));
banner.setIndicator(new CircleIndicator(this));
banner.setIndicatorSelectedColorRes(R.color.main_color);
banner.setIndicatorNormalColorRes(R.color.textColor);
banner.setIndicatorGravity(IndicatorConfig.Direction.LEFT);
banner.setIndicatorSpace(BannerUtils.dp2px(20));
banner.setIndicatorMargins(new IndicatorConfig.Margins((int) BannerUtils.dp2px(10)));
banner.setIndicatorWidth(10,20);
banner.addItemDecoration(new MarginItemDecoration((int) BannerUtils.dp2px(50)));
banner.setPageTransformer(new DepthPageTransformer());
banner.setOnBannerListener(this);
banner.addOnPageChangeListener(this);
//还有更多方法自己使用哦!!!!!!
//-----------------当然如果你想偷下懒也可以这么用--------------------
//banner所有set方法都支持链式调用(以下列举了一些方法)
banner.setAdapter(new BannerExampleAdapter(DataBean.getTestData()))
.setOrientation(Banner.VERTICAL)
.setIndicator(new CircleIndicator(this))
.setUserInputEnabled(false);
}
}
2.ConvenientBanner
Config in xml
<com.bigkoo.convenientbanner.ConvenientBanner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/convenientBanner"
android:layout_width="match_parent"
android:layout_height="200dp"
app:canLoop="true" //控制循环与否
/>
config in java code
//自定义你的Holder,实现更多复杂的界面,不一定是图片翻页,其他任何控件翻页亦可。
convenientBanner.setPages(
new CBViewHolderCreator() {
@Override
public LocalImageHolderView createHolder(View itemView) {
return new LocalImageHolderView(itemView);
}
@Override
public int getLayoutId() {
return R.layout.item_localimage;
}
}, localImages)
//设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设
// .setPageIndicator(new int[]{R.drawable.ic_page_indicator, R.drawable.ic_page_indicator_focused})
.setOnItemClickListener(this);
//设置指示器的方向
// .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.ALIGN_PARENT_RIGHT)
// .setOnPageChangeListener(this)//监听翻页事件
;
public class LocalImageHolderView implements Holder<Integer>{
private ImageView imageView;
@Override
public View createView(Context context) {
imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return imageView;
}
@Override
public void UpdateUI(Context context, final int position, Integer data) {
imageView.setImageResource(data);
}
}