android轮播图实现
时间: 2023-10-25 21:08:54 浏览: 16
Android 轮播图可以通过 ViewPager 和自定义 View 实现。以下是通过 ViewPager 实现轮播图的步骤:
1. 在布局文件中添加 ViewPager 和指示器,如下所示:
```xml
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="200dp" />
<LinearLayout
android:id="@+id/dotLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:gravity="center" />
```
2. 在 Java 代码中获取 ViewPager 和指示器,并创建适配器:
```java
ViewPager viewPager = findViewById(R.id.viewPager);
LinearLayout dotLayout = findViewById(R.id.dotLayout);
// 创建适配器
MyAdapter adapter = new MyAdapter(this, images);
viewPager.setAdapter(adapter);
// 添加指示器
addDots(dotLayout, adapter.getCount());
```
3. 创建 PagerAdapter 类,并实现相关方法:
```java
public class MyAdapter extends PagerAdapter {
private Context context;
private int[] images;
public MyAdapter(Context context, int[] images) {
this.context = context;
this.images = images;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(images[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((ImageView) object);
}
}
```
4. 创建指示器的方法:
```java
private void addDots(LinearLayout dotLayout, int count) {
ImageView[] dots = new ImageView[count];
for (int i = 0; i < count; i++) {
dots[i] = new ImageView(this);
dots[i].setImageResource(R.drawable.dot_unselected);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(8, 0, 8, 0);
dotLayout.addView(dots[i], params);
}
dots[0].setImageResource(R.drawable.dot_selected);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
for (int i = 0; i < count; i++) {
dots[i].setImageResource(R.drawable.dot_unselected);
}
dots[position].setImageResource(R.drawable.dot_selected);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
```
其中,`dot_unselected` 和 `dot_selected` 是指示器未选中和选中时的图片资源。