当前位置: 移动技术网 > IT编程>移动开发>Android > Android应用中利用ViewPager实现多页面滑动切换效果示例

Android应用中利用ViewPager实现多页面滑动切换效果示例

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

动听中国 叶倩彤,高敏爱,宋照肃

1、添加android support包
因为上面的几个类都是在android support包中才提供,我们先添加包。
在eclipse->window->android sdk manager,选择列表中extras->android support library进行安装。下载完后在android-sdk\extras\android\support目录下,这里我们选择v4版本,进入v4目录,拷贝其中的android-support-v4.jar文件到工程的libs目录(若没有新建)下即可,编译时adt会自动将其导入项目中。

2、新建viewpager的layout,内容如下

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  
  <android.support.v4.view.viewpager
    android:id="@+id/viewpager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" >
    <android.support.v4.view.pagertabstrip  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:layout_gravity="top" />
  </android.support.v4.view.viewpager>
</linearlayout>

viewpager用来管理layout并可以左右滑动显示各个页面数据,pagertabstrip用来显示页面title,android:layout_gravity="top"表示title在顶部,可设置bottom等。

 

3、新建fragmentactivity页面
fragmentactivity页面含有viewpager元素,可以用来显示fragment,定义如下:

public class viewpagerdemo extends fragmentactivity {

  /** 页面list **/
  list<fragment> fragmentlist = new arraylist<fragment>();
  /** 页面title list **/
  list<string>  titlelist  = new arraylist<string>();

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.view_pager_demo);

    viewpager vp = (viewpager)findviewbyid(r.id.viewpager);
    fragmentlist.add(new viewpagerfragment1("页面1"));
    fragmentlist.add(new viewpagerfragment1("页面2"));
    fragmentlist.add(new viewpagerfragment1("页面3"));
    titlelist.add("title 1 ");
    titlelist.add("title 2 ");
    titlelist.add("title 3 ");
    vp.setadapter(new mypageradapter(getsupportfragmentmanager(), fragmentlist, titlelist));
  }

  /**
   * 定义适配器
   */
  class mypageradapter extends fragmentpageradapter {

    private list<fragment> fragmentlist;
    private list<string>  titlelist;

    public mypageradapter(fragmentmanager fm, list<fragment> fragmentlist, list<string> titlelist){
      super(fm);
      this.fragmentlist = fragmentlist;
      this.titlelist = titlelist;
    }

    /**
     * 得到每个页面
     */
    @override
    public fragment getitem(int arg0) {
      return (fragmentlist == null || fragmentlist.size() == 0) ? null : fragmentlist.get(arg0);
    }

    /**
     * 每个页面的title
     */
    @override
    public charsequence getpagetitle(int position) {
      return (titlelist.size() > position) ? titlelist.get(position) : "";
    }

    /**
     * 页面的总个数
     */
    @override
    public int getcount() {
      return fragmentlist == null ? 0 : fragmentlist.size();
    }
  }
}

其中的mypageradapter集成自ragmentpageradapter,为viewpager提供数据源。

oncreate函数得到viewpager实例并设置数据源,getsupportfragmentmanager表示得到fragment管理器。viewpagerfragment1表示具体的页面,见下面介绍。

4、新建fragment页面
fragment页面即为左右滑动需要显示的页面,新建类集成fragment,并重写oncreateview函数即可。oncreateview函数相当于activity的oncreate函数。如下:

public class viewpagerfragment1 extends fragment {

  private string  text;
  private textview tv = null;

  public viewpagerfragment1(string text){
    super();
    this.text = text;
  }

  /**
   * 覆盖此函数,先通过inflater inflate函数得到view最后返回
   */
  @override
  public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {
    view v = inflater.inflate(r.layout.view_pager_fragment_demo1, container, false);
    tv = (textview)v.findviewbyid(r.id.viewpagertext);
    tv.settext(text);
    return v;
  }
}

5、示例工程代码:

package cn.trinea.android.demo;

import java.util.arraylist;
import java.util.list;

import android.os.bundle;
import android.support.v4.app.fragment;
import android.support.v4.app.fragmentmanager;
import android.support.v4.app.fragmentpageradapter;
import android.support.v4.view.viewpager;

public class viewpagerdemo extends basefragmentactivity {

  private static int total_count = 3;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate, r.layout.view_pager_demo);

    viewpager vp = (viewpager)findviewbyid(r.id.view_pager);
    list<fragment> fragmentlist = new arraylist<fragment>();
    list<string> titlelist = new arraylist<string>();
    for (int i = 0; i < total_count; i++) {
      viewpagerfragment viewpagerfragment1 = new viewpagerfragment();
      bundle bundle = new bundle();
      bundle.putint("upimageid", 0);
      bundle.putstring("text", "page " + i);
      viewpagerfragment1.setarguments(bundle);
      titlelist.add("title " + i);
      fragmentlist.add(viewpagerfragment1);
    }

    vp.setadapter(new mypageradapter(getsupportfragmentmanager(), fragmentlist, titlelist));

  }

  class mypageradapter extends fragmentpageradapter {

    private list<fragment> fragmentlist;
    private list<string>  titlelist;

    public mypageradapter(fragmentmanager fm, list<fragment> fragmentlist, list<string> titlelist) {
      super(fm);
      this.fragmentlist = fragmentlist;
      this.titlelist = titlelist;
    }

    @override
    public fragment getitem(int arg0) {
      return (fragmentlist == null || fragmentlist.size() == 0) ? null : fragmentlist.get(arg0);
    }

    @override
    public charsequence getpagetitle(int position) {
      return (titlelist.size() > position) ? titlelist.get(position) : "";
    }

    @override
    public int getcount() {
      return fragmentlist == null ? 0 : fragmentlist.size();
    }
  }
}

简单效果如下:

2016323102800943.jpg (476×204)

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

相关文章:

验证码:
移动技术网