无限极增健口服液,上古卷轴5钢锭,至尊贡芽
先上一张效果图:
说到viewpager实现轮播图效果,那么肯定会用到pageradapter,下面先介绍下这个类。
pageradapter简介
pageradapter是android.support.v4包中的类,是一个抽象类,直接继承于object,导入包android.support.v4.view.pageradapter即可使用。
pageradapter主要是viewpager的适配器,而viewpager则也是在android.support.v4扩展包中新添加的一个强大的控件,可以实现控件的滑动效果,比如咱们在软件中常见的广告栏的滑动效果,用viewpager就可以实现。今天主要介绍如何使用viewpagr并重写pageradapter实现常见广告栏的滑动效果。
既然是个抽象类,那么我们新建一个类去继承它,重写四个方法:
1.public object instantiateitem(viewgroup container, int position)
2.public void destroyitem(viewgroup container, int position, object object)
3.public int getcount()
4.public boolean isviewfromobject(view arg0, object arg1)
myviewpageradapter类:
public class myviewpageradapter extends pageradapter { private list<imageview> mlist; public myviewpageradapter(list<imageview> mlist){ this.mlist=mlist; } //当要显示的图片进行缓存时,会调用这个方法进行显示图片的初始化 //我们将要显示的imageview加入到viewgroup中 public object instantiateitem(viewgroup container, int position) { // todo auto-generated method stub container.addview(mlist.get(position)); return mlist.get(position); } @override //pageradapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁 public void destroyitem(viewgroup container, int position, object object) { // todo auto-generated method stub container.removeview(mlist.get(position)); } //获取要滑动的控件的数量, public int getcount() { // todo auto-generated method stub return mlist.size(); } //来判断显示的是否是同一张照片,这个我们将两个图片对比 再返回 public boolean isviewfromobject(view arg0, object arg1) { // todo auto-generated method stub return arg0==arg1; } }
activity_main.xml:
<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" > <android.support.v4.view.viewpager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="200dp" /> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignbottom="@id/vp" android:background="#33000000" android:orientation="vertical" android:paddingbottom="10dp" > <linearlayout android:id="@+id/ll_points" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" android:paddingbottom="10dp" > </linearlayout> </linearlayout> </relativelayout>
mainactivity:
public class mainactivity extends activity { private viewpager mvp; //private textview tvtitle; private linearlayout llpoints; //private string[] titles;// 存放所有要显示的标题 private int[] images;// 存放所有要显示的图片资源id private list<imageview> list=new arraylist<imageview>();;// 存放要显示在viewpager对象中的所有imageview对象 private int prevposition = 0; private handler handler = new handler() { @suppresslint("handlerleak") public void handlemessage(android.os.message msg) { switch (msg.what) { case 0: // 得到mvp当前页面的索引 int currentitem = mvp.getcurrentitem(); // 要显示的下一个页面的索引 currentitem++; // 设置viewpager显示的页面 mvp.setcurrentitem(currentitem % list.size()); break; default: break; } }; }; @suppresswarnings("deprecation") protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); // titles = gettitles(); images=getimages(); for (int i = 0; i < images.length; i++) { imageview iv=new imageview(this); iv.setbackgroundresource(images[i]); list.add(iv); //根据图片的数量生成相对应的数量的小圆点 final view view=new view(this); view.setbackgroundresource(r.drawable.login__05); displaymetrics metrics=new displaymetrics(); float width=typedvalue.applydimension(typedvalue.complex_unit_px,30, metrics); float height=typedvalue.applydimension(typedvalue.complex_unit_px, 30, metrics); linearlayout.layoutparams params=new linearlayout.layoutparams((int)width,(int)height); params.leftmargin=5; view.setlayoutparams(params); llpoints.addview(view); } //设置第一页显示的标题 //tvtitle.settext(titles[0]); //设置第一页的时候,小圆点显示的背景图 llpoints.getchildat(0).setbackgroundresource(r.drawable.login__03); //下面封装viewpager的适配器 myviewpageradapter adapter=new myviewpageradapter(list); mvp.setadapter(adapter); //设置viewpager对象页面变化时的监听 mvp.setonpagechangelistener(new onpagechangelistener() { @override //当下一个页面被选择的时候 public void onpageselected(int arg0) { // todo auto-generated method stub //tvtitle.settext(titles[arg0%list.size()]); llpoints.getchildat(prevposition).setbackgroundresource(r.drawable.login__05); llpoints.getchildat(arg0).setbackgroundresource(r.drawable.login__03); //把当前点位置做为下一次变化的前一个点的位置 prevposition=arg0; } @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 } }); new thread(new runnable() { @override public void run() { // todo auto-generated method stub while (true) { systemclock.sleep(3000); handler.sendemptymessage(0); } } }).start(); } private void initview() { // todo auto-generated method stub mvp = (viewpager) findviewbyid(r.id.vp); //tvtitle = (textview) findviewbyid(r.id.tv_title); llpoints = (linearlayout) findviewbyid(r.id.ll_points); } private int[] getimages(){ return new int[]{r.drawable.banner_01,r.drawable.banner_02,r.drawable.banner_03}; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio 解决logcat无过滤工具栏的操作
Android Studio 恢复小窗口停靠模式(Docked Mode)
Android studio保存logcat日志到本地的操作
Android Studio快捷键生成TAG、Log.x日志输出介绍
网友评论