使用ViewPage2r和PagerAdapter实现轮播图
时间: 2024-05-27 17:10:56 浏览: 144
ViewPage2和PagerAdapter的组合可以很方便地实现轮播图功能。下面是实现步骤:
1. 创建一个布局文件,包含一个ViewPager控件和一个指示器(可以使用自定义的或者第三方库)。
2. 创建一个PagerAdapter的子类,用于管理轮播图中的数据。在该类中实现以下三个方法:
- getCount():返回轮播图的总数。
- instantiateItem():实例化轮播图中的每一个View,并将其添加到ViewPager中。
- destroyItem():销毁不再需要的View。
3. 在Activity或Fragment中,将ViewPager和PagerAdapter关联起来,并将数据传入PagerAdapter中。
4. 在轮播图的最后一个View中,添加一个点击事件,跳转到对应的页面。
5. 在Activity或Fragment中,使用Handler和Runnable实现自动轮播功能,以及响应指示器的滑动事件。
6. 在Activity或Fragment的生命周期中,分别在onResume()和onPause()方法中开启和停止轮播图的自动播放。
代码示例:
1. 布局文件
```
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="200dp" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:tabGravity="center"
app:tabIndicatorColor="@color/colorPrimary"
app:tabIndicatorHeight="2dp"
app:tabMode="fixed" />
</LinearLayout>
```
2. PagerAdapter的子类
```
public class BannerPagerAdapter extends RecyclerView.Adapter<BannerPagerAdapter.ViewHolder> {
private List<Banner> mData;
private Context mContext;
public BannerPagerAdapter(Context context, List<Banner> data) {
mContext = context;
mData = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_banner, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Banner banner = mData.get(position);
Glide.with(mContext).load(banner.getImageUrl()).into(holder.imageView);
holder.titleView.setText(banner.getTitle());
}
@Override
public int getItemCount() {
return mData.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView titleView;
ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
titleView = itemView.findViewById(R.id.titleView);
}
}
}
```
3. Activity中的代码
```
public class MainActivity extends AppCompatActivity {
private ViewPager2 mViewPager;
private BannerPagerAdapter mAdapter;
private Handler mHandler;
private int mCurrentPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initView() {
mViewPager = findViewById(R.id.viewPager);
TabLayout tabLayout = findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(mViewPager);
}
private void initData() {
List<Banner> banners = new ArrayList<>();
banners.add(new Banner("http://xxx.com/1.jpg", "Banner 1"));
banners.add(new Banner("http://xxx.com/2.jpg", "Banner 2"));
banners.add(new Banner("http://xxx.com/3.jpg", "Banner 3"));
banners.add(new Banner("http://xxx.com/4.jpg", "Banner 4"));
mAdapter = new BannerPagerAdapter(this, banners);
mViewPager.setAdapter(mAdapter);
mHandler = new Handler();
mHandler.postDelayed(mRunnable, 3000);
}
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
mCurrentPosition++;
mViewPager.setCurrentItem(mCurrentPosition);
mHandler.postDelayed(this, 3000);
}
};
@Override
protected void onResume() {
super.onResume();
mHandler.postDelayed(mRunnable, 3000);
}
@Override
protected void onPause() {
super.onPause();
mHandler.removeCallbacks(mRunnable);
}
}
```
阅读全文