博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ViewPager 无限循环
阅读量:6138 次
发布时间:2019-06-21

本文共 3965 字,大约阅读时间需要 13 分钟。

Overview

我们在使用ViewPager来制作图片轮播的时候,常常为ViewPager不能一直无限循环的问题所苦恼。对于这个问题,目前从网上找到了两个思路来解决:

  • 将 ViewPager 的Count 的数量设置的尽可能的大,然后就造成了无限循环的假象。

  • 第二种,方式是,假如三个图片无限循环,那么就需要用5张图片,如下图所示

997244-20170925113607260-1943024179.jpg

使用这种方式启动的时候,需要将 2 号图片,设置为第一张,当向前滑动的时候,因为前面的 1号图片 是和 4 号图片一样,那么,给人的错觉就像是无线循环的一样,当选中一号图片后,立即将当前选中的图片设置为 4 号图片,4号图片向5号图片滑动也是同理。

997244-20170925113616964-617765640.gif

实现

关于第一种方式,我想对大家来说都不是问题,本文主要是介绍第二种方式的实现方式

Step 1: 准备好任意3张图片

Step 2: 建立Adapter,为了一劳永逸,我们需要做一些简单的封装,来方便我们以后的使用

通用的Adapter

package com.example.it.recycleviewpager;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * Created by 鲁迅认识的那只猹 on 9/25/2017 10:58 AM. * Emial 1258730808@qq.com * Desc: */public abstract class BaseRecycleViewPagerAdapter
extends PagerAdapter { private Context context; private List
dataSource; public BaseRecycleViewPagerAdapter(Context context, List
dataSource) { this.context = context; this.dataSource = dataSource; //为了无线循环添加两个冗余项目 T t1 = dataSource.get(0); T t2 = dataSource.get(dataSource.size() - 1); this.dataSource.add(dataSource.size() , t1); this.dataSource.add(0, t2); } /** * 返回视图的数量 */ @Override public int getCount() { return dataSource.size(); } /** * 实例化,Page */ @Override public Object instantiateItem(ViewGroup container, int position) { View view = bindingView(position); container.addView(view); return view; } /*** * 抽象方法,绑定视图,需要子类实现 */ abstract View bindingView(int position); /** * 回收资源 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } public Context getContext() { return context; } public List
getDataSource() { return dataSource; }}

建立Adapter,从BaseRecycleViewPagerAdapter 继承

public class AdvertisingAdapter extends BaseRecycleViewPagerAdapter
{ public AdvertisingAdapter(Context context, List
dataSource) { super(context, dataSource); } /** * 建立我们需要用来轮播的图片 */ @Override View bindingView(int postion) { ImageView imageView = new ImageView(getContext()); imageView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); imageView.setImageResource(getDataSource().get(postion)); return imageView; }}

Step3: 测试我们的Adapter

public class MainActivity extends AppCompatActivity {    private ViewPager viewPager;    private AdvertisingAdapter advertisingAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        viewPager = (ViewPager) this.findViewById(R.id.vp);        init();    }    void init() {        List
resIdList = new ArrayList<>(); resIdList.add(R.drawable.pet2); resIdList.add(R.drawable.pet3); resIdList.add(R.drawable.pet4); advertisingAdapter = new AdvertisingAdapter(this, resIdList); viewPager.setAdapter(advertisingAdapter); //设置第二张图片为最初显示的图片 viewPager.setCurrentItem(1); //设置Item的选中事件,实现循环 viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { if (position == 0) viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 2, false); if (position == viewPager.getAdapter().getCount() - 1) viewPager.setCurrentItem(1, false); } }); }}

源码下载

基本的需求已经实现,如果还有更多的需求,还可以根据上面的扩展。

我的码云: https://gitee.com/ShareKnowledge/RecycleViewPager

转载于:https://www.cnblogs.com/slyfox/p/7591121.html

你可能感兴趣的文章
网页开发从业者仍更重视桌面程序及网页应用
查看>>
如何解决mysql数据库8小时无连接自动关闭
查看>>
ASP.NET Aries 入门开发教程5:自定义列表页工具栏区
查看>>
Rushcrm:如何利用CRM系统的权限设置
查看>>
《Cisco IPv6网络实现技术(修订版)》一2.7 复习题
查看>>
Facebook 开源 Android 调试工具 —— Stetho
查看>>
生活不止有苟且,还有N个免费DevOps开源工具
查看>>
视频直播Android推流SDK初体验
查看>>
第十三天:制定预算
查看>>
java技术团队必须要注意的那几个点
查看>>
Hibernate ORM 5.1.7 发布,数据持久层框架
查看>>
数百万网站因流行 PHP 脚本的安全漏洞而受影响
查看>>
《走进SAP(第2版)》——2.7 SAP对业务流程的支持
查看>>
《C语言解惑》—— 2.9 输出值的操作符
查看>>
Project Volta 让 Android 续航提升了多少?
查看>>
《树莓派实战秘籍》——1.7 技巧07使用过压获得更高的性能
查看>>
《SAS 统计分析与应用从入门到精通(第二版)》一1.4 SAS系统的文件管理
查看>>
《众妙之门——网页设计专业之道》——2.4 总结
查看>>
MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)
查看>>
Java 注解详解 (annotation)
查看>>