android利用ViewPager实现左右滑动功能

这是我们的主页面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <android.support.v4.view.ViewPager              //这是实现页面切换所用到的组件
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:id="@+id/viewpager"
        >
        
        <android.support.v4.view.PagerTabStrip  //这是头部的菜单栏  是ViewPager的子标签
            android:id="@+id/tab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             android:layout_gravity="top"      //定位标题栏在头部
            ></android.support.v4.view.PagerTabStrip>

    </android.support.v4.view.ViewPager>
</LinearLayout>

下面我们看一下页面的布局,由于是展示所以做的比较简单,容易说明问题,四个布局文件用来显示下面的界面用的。

view1.xml

<?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" >
    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/view1"
        android:text="第一个界面"
        />
</LinearLayout>
其他三个布局文件都是一样的。

我们想要的布局文件已经准备好了,下面我们把它们连接起来。MainActivity如下:

public class MainActivity extends ActionBarActivity {
    List<View>viewlist;
    ViewPager viewpager;
    PagerTabStrip tab;
    List<String>titlelist;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        viewlist=new ArrayList<View>();           //用来装界面视图的数组如‘第一界面’'
        titlelist=new ArrayList<String>();        //用来装头部的数组,如第一页、第二页
        viewpager=(ViewPager) findViewById(R.id.viewpager);    //初始化viewpager组件
        
        //将视图加入数组
        View view1=View.inflate(this, R.layout.view1, null);
        View view2=View.inflate(this, R.layout.view2, null);
        View view3=View.inflate(this, R.layout.view3, null);
        View view4=View.inflate(this, R.layout.view4, null);
        
        viewlist.add(view1);
        viewlist.add(view2);
        viewlist.add(view3);
        viewlist.add(view4);
        
        //添加头部菜单栏
        titlelist.add("第一页");
        titlelist.add("第二页");
        titlelist.add("第三页");
        titlelist.add("第四页");
        
        //添加适配器
        viewpager.setAdapter(new MyAdater(viewlist,titlelist));    //利用适配器,将视图组和标题组传过去适配器进行处理
        
    }

我们需要用到的一个适配器是PagerAdapter,我们新建一个MyAdater类继承这个PagerAdapter,设置好适配器之后给ViewPager调用。

public class MyAdater extends PagerAdapter{
    

    List<View> viewlist=new ArrayList<View>();
    List<String> titlelist=new ArrayList<String>();
    public MyAdater(List<View> viewlist,List<String> titlelist) {     //接收视图组和标题组
        super();
        this.viewlist = viewlist;
        this.titlelist=titlelist;
    }

    @Override
    public int getCount() {     //获得界面的个数,以便下面的定位。不然适配器无法工作
        // TODO Auto-generated method stub
        return viewlist.size();
    }

//,并加载position页。position是一个int型数据,以0开始。
  @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        container.addView(viewlist.get(position));  //将视图加进容器以便定位给其他方法操作
        return viewlist.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {  

//由于上面已经将视图加进容器中,即将不显示的页面进行销毁。若再次显现即会调用instantiateItem方法
        // TODO Auto-generated method stub
        container.removeView(viewlist.get(position));
    }

    @Override
    public CharSequence getPageTitle(int position) {  //获取标题数组的内容添加到头部
        // TODO Auto-generated method stub
        return titlelist.get(position);
    }
}

//这是个人理解,欢迎各位进行交流,祝您们工作愉快,身体健康



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值