先看效果图
banner图示例
可实现自动轮播以及手动左右无限滑动
实现的原理是在自己的准备的banner图的首尾再加上两张图,中间的adcde是我们需要轮播的图片,首尾则为特意加上去的,目的是使滑动更加的平滑,并不参与实际的操作。
当页面从编号1滑动到0时,将页面设置为5;
当页面从编号5滑动到6时,将页面设置为1;.
为了防止页面停顿,突然跳到下一页的情况,将设置页面的代码放到finishUpdate(@NonNull ViewGroup container)方法中去实现,该方法会在view创建和销毁之前调用。
具体实现如下:
布局文件代码:
自定义视图BannerPager:
public class BannerPager extends RelativeLayout implements View.OnClickListener {
private static final String TAG = "BannerPager";
private Context mContext; // 声明一个上下文对象
private ViewPager vp_banner; // 声明一个翻页视图对象
private RadioGroup rg_indicator; // 声明一个单选组对象
private ListmViewList = new ArrayList(); // 声明一个图像视图队列
private int mInterval = 2000; // 轮播的时间间隔,单位毫秒
public BannerPager(Context context) {
this(context, null);
}
public BannerPager(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initView();
}
// 初始化视图
private void initView() {
// 根据布局文件banner_pager.xml生成视图对象
View view = LayoutInflater.from(mContext).inflate(R.layout.banner_pager, null)