android 使用ViewPager实现轮播图
时间: 2024-01-30 12:46:05 浏览: 31
使用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实现轮播图的主要步骤。