Android 如何简单的实现【轮播图 】— ViewPager + PagerAdapter
16lz
2021-01-23
效果图:
AdvsViewPagerAdapter.java:
public class AdvsViewPagerAdapter extends PagerAdapter { private List<ImageView> imageViewList ; // 图片都存在了集合中 public AdvsViewPagerAdapter(List<ImageView> imageViewList) { super(); this.imageViewList = imageViewList; } // 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量 @Override public int getCount() { return imageViewList.size(); } // 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可 @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { container.addView(imageViewList.get(position)); return imageViewList.get(position); } // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁 @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(imageViewList.get(position)); } // 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可 @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; }}
MainActivity.java
public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private ImageView imageView1,imageView2,imageView3; private List<ImageView> imageViewList; private AdvsViewPagerAdapter adapter; private Handler handler; int i; //用来记录判断哪张轮播图片 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.vp_advs); initImageViewList(); // 将图片放到集合中保存起来 adapter = new AdvsViewPagerAdapter(imageViewList); viewPager.setAdapter(adapter); i = 0; handler = new Handler(){ @Override public void handleMessage(Message msg) { // 更改轮播图片 viewPager.setCurrentItem(i % 3); i++; } }; //顶部图片轮播,还没做手动切换之后的优化 advsChange(); } private void advsChange() { handler.post(new Runnable(){ @Override public void run() { //延时3s handler.postDelayed(this, 3000); handler.sendEmptyMessage(0); } }); } private void initImageViewList() { // 先让各个对象拿到资源 imageView1 = new ImageView(this); imageView1.setBackgroundResource(R.drawable.ic_one); imageView2 = new ImageView(this); imageView2.setBackgroundResource(R.drawable.ic_two); imageView3 = new ImageView(this); imageView3.setBackgroundResource(R.drawable.ic_three); // 再放入集合中 imageViewList = new ArrayList<>(); imageViewList.add(imageView1); imageViewList.add(imageView2); imageViewList.add(imageView3); }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/vp_advs" android:layout_width="match_parent" android:layout_height="150dp" android:layout_marginTop="40dp">android.support.v4.view.ViewPager> LinearLayout>
如果有问题,可以联系我qq:1787424177
最后,我真诚的希望能评论一句嘛,让我知道你来过,我会很开心的
更多相关文章
- IDEA和Android Studio设置自定义背景图片
- android图片压缩工具类分享
- 『ANDROID』Android实现圆形的图片边角
- PC客户端与Android实现图片传送
- android_常用UI控件_02_EditText_01添加图片到edittext中
- Android 图片点击 全屏缩放预览
- Android富文本图文混排、粗体、斜体、图片、下划线、删除线等