android studio实现轮播图具体代码
时间: 2023-10-13 12:16:42 浏览: 44
Android Studio 实现轮播图的方式有很多,这里提供一种常用的实现方式,基于 ViewPager 和 PagerAdapter。
1. 在布局文件中添加 ViewPager 控件和指示器(Indicator)控件。
```xml
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<LinearLayout
android:id="@+id/indicatorLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"/>
```
2. 创建数据源,即图片资源列表。
```java
private int[] mImageIds = {R.drawable.image1, R.drawable.image2, R.drawable.image3};
```
3. 创建 PagerAdapter。
```java
private class MyPagerAdapter extends PagerAdapter {
private int[] mImageIds;
public MyPagerAdapter(int[] imageIds) {
mImageIds = imageIds;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(container.getContext());
imageView.setImageResource(mImageIds[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((ImageView) object);
}
@Override
public int getCount() {
return mImageIds.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
```
4. 在 Activity 或 Fragment 中设置 ViewPager 和指示器。
```java
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(new MyPagerAdapter(mImageIds));
LinearLayout indicatorLayout = findViewById(R.id.indicatorLayout);
for (int i = 0; i < mImageIds.length; i++) {
ImageView indicatorView = new ImageView(this);
indicatorView.setImageResource(R.drawable.ic_indicator);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(10, 0, 10, 0);
indicatorLayout.addView(indicatorView, layoutParams);
}
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 < indicatorLayout.getChildCount(); i++) {
ImageView indicatorView = (ImageView) indicatorLayout.getChildAt(i);
indicatorView.setImageResource(i == position ? R.drawable.ic_indicator_selected : R.drawable.ic_indicator);
}
}
@Override
public void onPageScrollStateChanged(int state) {}
});
```
实现轮播图的关键在于 PagerAdapter 的实现,其中 instantiateItem() 方法用于创建页面,destroyItem() 方法用于销毁页面,getCount() 方法用于获取页面数量,isViewFromObject() 方法用于判断页面是否由 Object 生成。同时,通过 addOnPageChangeListener() 方法监听 ViewPager 页面的滑动事件,改变指示器的状态。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)