Android实现轮播图无限循环效果
程序员文章站
2023-12-20 23:23:25
本文实例为大家分享了android轮播图无限循环的具体代码,供大家参考,具体内容如下
实现无限循环
在getcount()方法中,返回一个很大的值,integer.ma...
本文实例为大家分享了android轮播图无限循环的具体代码,供大家参考,具体内容如下
实现无限循环
在getcount()方法中,返回一个很大的值,integer.max_value
在instantiateitem()方法中,获取当前view的索引时,进行取于操作,传递进来的int position是个非常大的数,对他进行求余数
在destroyitem()方法中,同样
在onpageselected()监听方法中,对传递进来的索引进行取于
反向的无限循环
调用viewpager对象的setcurrentitem()方法,设置第一次进来时候的当前页,参数:int数字,我们把它定位到integer.max_value的中间,并且保证第一条是当前位置,integer.max_value/2-((integer.max_value/2)%banners.size())
目前有个左划空白页的问题没解决
package com.tsh.myviewpager; import java.util.arraylist; import java.util.list; import android.app.activity; import android.os.bundle; import android.support.v4.view.pageradapter; import android.support.v4.view.viewpager; import android.support.v4.view.viewpager.onpagechangelistener; import android.view.view; import android.view.viewgroup; import android.widget.imageview; import android.widget.linearlayout; import android.widget.textview; public class mainactivity extends activity { private viewpager vp_banner; private linearlayout ll_points; private textview tv_title; private list<view> banners; private string[] titles=new string[]{ "新闻标题1", "新闻标题2", "新闻标题3" }; private list<imageview> points=new arraylist<imageview>(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // 初始化 vp_banner = (viewpager) findviewbyid(r.id.vp_banner); ll_points = (linearlayout) findviewbyid(r.id.ll_points); tv_title = (textview) findviewbyid(r.id.tv_title); // banner部分 banners = new arraylist<>(); imageview img1 = new imageview(this); img1.setimageresource(r.drawable.a); banners.add(img1); imageview img2 = new imageview(this); img2.setimageresource(r.drawable.b); banners.add(img2); imageview img3 = new imageview(this); img3.setimageresource(r.drawable.c); banners.add(img3); //小图标 ll_points=(linearlayout) findviewbyid(r.id.ll_points); for(int i=0;i<banners.size();i++){ imageview image=new imageview(this); image.setimageresource(r.drawable.point_selector); linearlayout.layoutparams params=new linearlayout.layoutparams(5, 5); params.rightmargin=4; image.setlayoutparams(params); if(i==0){ image.setenabled(true); }else{ image.setenabled(false); } points.add(image); ll_points.addview(image); } // 设置适配器 vp_banner.setadapter(new mypageradapter()); vp_banner.setcurrentitem(integer.max_value/2-((integer.max_value/2)%banners.size())); vp_banner.setonpagechangelistener(new onpagechangelistener() { @override public void onpageselected(int arg0) { tv_title.settext(titles[arg0%banners.size()]); //小图标处理 for(imageview point:points){ point.setenabled(false); } points.get(arg0%banners.size()).setenabled(true); } @override public void onpagescrolled(int arg0, float arg1, int arg2) { // todo auto-generated method stub } @override public void onpagescrollstatechanged(int arg0) { // todo auto-generated method stub } }); } private class mypageradapter extends pageradapter { @override public void destroyitem(viewgroup container, int position, object object) { system.out.println("销毁:"+position); container.removeview((view)object); object=null; } @override public object instantiateitem(viewgroup container, int position) { system.out.println("初始化:"+position); position=position%banners.size(); //解决右划出错 if(banners.get(position).getparent()!=null){ //container.removeview(banners.get(position)); }else{ container.addview(banners.get(position)); } return banners.get(position); } @override public int getcount() { return integer.max_value; } @override public boolean isviewfromobject(view arg0, object arg1) { return arg0 == arg1; } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读