为了账号安全,请及时绑定邮箱和手机立即绑定

ViewPager之基础篇

标签:
Android

ViewPager介绍:

 1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

  2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

  3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。


      在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。

由下所示:

<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"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/tabstrip"
            android:layout_width="wrap_content"
            android:layout_height="50dip"
            android:gravity="center" />
    </android.support.v4.view.ViewPager>

</RelativeLayout>


做个简单的案例:

先看看效果,如下图:

  5bc348920001d7e604080724.jpg         

                          第一个View向第二个View滑动

   5bc3489300019ccf04080724.jpg

                          第二个View向第三个View滑动

一、新建项目,引入ViewPager控件ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。

1. activity_main.xml加入ViewPager的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

注:其中 <android.support.v4.view.ViewPager /> 是ViewPager对应的组件,要将其放到想要滑动的位置


2. 新建三个layout,用于滑动切换的视图

布局代码分别如下:


layout01.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f00">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一页"
        android:textSize="70sp"
        android:textColor="#fff" />
    </LinearLayout>

layout02.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="#f00">

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="第二页"
       android:textSize="70sp"
       android:textColor="#fff" />
   </LinearLayout>

layout03.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f00">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第三页"
        android:textSize="70sp"
        android:textColor="#fff" />
    </LinearLayout>


二、代码实战

MainActivity.java:

package com.signal027.viewpagerdemo_01;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    private ViewPager mViewPager;//对应的ViewPager
    private View mView1, mView2, mView3; //对应我们的三个Layout
    private List<View> mViewList;//View集合

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //查找ViewPager控件
        mViewPager = (ViewPager) findViewById(R.id.viewPager);

        //初始化过程,就是将资源与变量联系起来布局
        LayoutInflater inflater = getLayoutInflater();
        //View绑定布局
        mView1 = inflater.inflate(R.layout.layout01, null);
        mView2 = inflater.inflate(R.layout.layout02, null);
        mView3 = inflater.inflate(R.layout.layout03, null);

        //将3个view加入集合
        mViewList = new ArrayList<>();
        mViewList.add(mView1);
        mViewList.add(mView2);
        mViewList.add(mView3);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(MainActivity.this, mViewList);
        //适配
        mViewPager.setAdapter(pagerAdapter);
    }
}


MyPagerAdapter.java


package com.signal027.viewpagerdemo_01;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;

/**
 * Created by Bill on 2016/5/22.
 */
public class MyPagerAdapter extends PagerAdapter{

    private List<View> mViewList;
    public MyPagerAdapter(Context context,List<View> mViewList){
        this.mViewList = mViewList;
    }

    //返回要滑动View的个数
    @Override
    public int getCount() {
        return mViewList.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }
    //做了两件事:1.将View添加到container中,2.返回当前View
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(mViewList.get(position));
        return mViewList.get(position);
    }
    //从当前container中删除指定位置(position)的View
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
       // super.destroyItem(container, position, object);
        container.removeView(mViewList.get(position));
    }
}


注:适配器这个东东想必大家都不莫生,在ListView中也有适配器,listView通过重写GetView()函数来获取当前要加载的Item。而PageAdapter不太相同,毕竟PageAdapter是单个VIew的合集。

PageAdapter 必须重写的四个函数:

  • boolean isViewFromObject(View arg0, Object arg1)

  • int getCount() 

  • void destroyItem(ViewGroup container, int position,Object object)

  • Object instantiateItem(ViewGroup container, int position)


原文链接:http://www.apkbus.com/blog-805096-60596.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消