android banner停止轮播,Android使用ViewPager实现无限循环banner图,实现手指滑动时轮播停止功能...

先看效果图

fbbe192f8182ad3050a5ea7ab9b999b2.png banner图示例

可实现自动轮播以及手动左右无限滑动

实现的原理是在自己的准备的banner图的首尾再加上两张图,中间的adcde是我们需要轮播的图片,首尾则为特意加上去的,目的是使滑动更加的平滑,并不参与实际的操作。

bc534c33bcc1634a9d4f46af810a32bd.png

当页面从编号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)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用ViewPager实现轮播的步骤如下: 1. 在布局文件中添加ViewPager控件和指示器(可选)。 ```xml <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="200dp" /> <LinearLayout android:id="@+id/indicator_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" /> ``` 2. 创建一个PagerAdapter,设置数据源和页面布局。 ```java public class MyPagerAdapter extends PagerAdapter { private List<Integer> mData; private LayoutInflater mInflater; public MyPagerAdapter(Context context, List<Integer> data) { mData = data; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mData.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { View view = mInflater.inflate(R.layout.item_pager, container, false); ImageView imageView = view.findViewById(R.id.image_view); imageView.setImageResource(mData.get(position)); container.addView(view); return view; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } ``` 3. 绑定PagerAdapter和ViewPager,并设置ViewPager的滑动监听,以便更新指示器。 ```java ViewPager viewPager = findViewById(R.id.view_pager); MyPagerAdapter adapter = new MyPagerAdapter(this, mData); viewPager.setAdapter(adapter); LinearLayout indicatorLayout = findViewById(R.id.indicator_layout); for (int i = 0; i < mData.size(); i++) { View indicator = new View(this); int size = getResources().getDimensionPixelSize(R.dimen.indicator_size); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(size, size); lp.leftMargin = i == 0 ? 0 : getResources().getDimensionPixelSize(R.dimen.indicator_margin); indicator.setLayoutParams(lp); indicator.setBackgroundResource(R.drawable.indicator_bg); indicatorLayout.addView(indicator); } viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); for (int i = 0; i < mData.size(); i++) { View indicator = indicatorLayout.getChildAt(i); indicator.setSelected(i == position); } } }); ``` 其中,item_pager布局文件中只包含一个ImageView控件,用于显示片。indicator_bg是指示器的背景,可以自定义。 以上就是使用ViewPager实现轮播的主要步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值