当前位置: 移动技术网 > IT编程>移动开发>Android > Android ViewPager实现轮播图效果

Android ViewPager实现轮播图效果

2019年07月24日  | 移动技术网IT编程  | 我要评论

无限极增健口服液,上古卷轴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};


}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网