Android使用viewpager实现自动无限轮播图
2026/8/27 13:17:19 网站建设 项目流程

1、具体步骤

说下大概实现步骤,一般我们有两种,一种是viewpager+作为游标的点 。另外一种是重写viewpager。

效果图:

1.1 布局,直接viewpager+一个viewgroup就好。

代码语言:javascript

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.maxence.viewpager.MainActivity"<RelativeLayoutandroid:layout_width="match_parent"android:layout_height="220dp"<android.support.v4.view.ViewPagerandroid:id="@+id/vp_pager"android:layout_width="match_parent"android:layout_height="match_parent"/<!--作为viewgroup 动态 add 游标--<LinearLayoutandroid:id="@+id/ll_container"android:layout_width="match_parent"android:layout_height="30dp"android:gravity="center"android:orientation="horizontal"android:layout_alignParentBottom="true"</LinearLayout</RelativeLayout</RelativeLayout

1.2 动态add的点,常规白点:point_normal.xml。

代码语言:javascript

<?xml version="1.0"encoding="utf-8"?<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"<strokeandroid:width="1dip"android:color="#ffffff"/<solid android:color="#ffffff"/</shape

选中为红点: point_select.xml

代码语言:javascript

<?xml version="1.0"encoding="utf-8"?<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"<strokeandroid:width="1dp"android:color="#ff0000"/<solid android:color="#ff0000"/</shape

1.3动态添加进去图片和游标点。

代码语言:javascript

/** * 初始化数据 */privatevoidinitData(){mContext=this;int[]i=newint[]{R.drawable.bg_lunbo1,R.drawable.bg_lunbo2,R.drawable.bg_lunbo3,R.drawable.bg_lunbo4};al=newArrayList<ImageView();for(int x=0;x<i.length;x++){ImageView iv=newImageView(mContext);iv.setBackgroundResource(i[x]);al.add(iv);View v=newView(mContext);v.setBackgroundResource(R.drawable.point_normal);//有多少张图就放置几个点LayoutParams layoutParams=newLinearLayout.LayoutParams(15,15);layoutParams.leftMargin=30;ll_container.addView(v,layoutParams);}vp_pager.setAdapter(newMyadapter());vp_pager.setOnPageChangeListener(this);vp_pager.setCurrentItem(al.size()*1000);//这个是无线轮询的关键ll_container.getChildAt(0).setBackgroundResource(R.drawable.point_select);prePosition=0;}

1.4 viewpgaer绑定PagerAdapter,这样就能滑动照片并且无限滑了。

代码语言:javascript

classMyadapterextendsPagerAdapter{@OverridepublicintgetCount(){returnInteger.MAX_VALUE;// 要无限轮播}@OverridepublicbooleanisViewFromObject(View arg0,Object arg1){returnarg0==arg1;}@OverridepublicObjectinstantiateItem(ViewGroup container,int position){int position1=position%al.size();ImageView imageView=al.get(position1);container.addView(imageView);returnimageView;}@OverridepublicvoiddestroyItem(ViewGroup container,int position,Object object){container.removeView((View)object);}}

1.5 实现游标,就是滑动图片,下面的红点也跟着变化。

代码语言:javascript

vp_pager.setOnPageChangeListener(this);@OverridepublicvoidonPageScrollStateChanged(int arg0){}@OverridepublicvoidonPageScrolled(int arg0,float arg1,int arg2){}@OverridepublicvoidonPageSelected(int position){int newPosition=position%al.size();ll_container.getChildAt(newPosition).setBackgroundResource(R.drawable.point_select);ll_container.getChildAt(prePosition).setBackgroundResource(R.drawable.point_normal);prePosition=newPosition;}

1.6实现自动轮询。开启一个线程即可。

代码语言:javascript

/** * 自动轮询 */privatevoidpollint(){pThread=newPollThread();pThread.start();}classPollThreadextendsThread{@Overridepublicvoidrun(){while(poll){try{Thread.sleep(2000);}catch(InterruptedException e){e.printStackTrace();}

runOnUiThread(new Runnable() {@Overridepublic void run() {vp_pager.setCurrentItem(vp_pager.getCurrentItem()+1);}});}}}这样就搞定了,仅仅提供一个思路。自己可以扩展,例如重写viewpager,把功能封装在内部即可。

更多Android进阶指南 可以扫码 解锁《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2024最新Android中高级面试题汇总+解析,告别零offer

4.企业级Android音视频开发学习路线+项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战+360°全方面性能调优

10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询