ViewPager实现滑动切换页面

<span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;">ViewPager是谷歌官方提供的一个兼容低版本安卓设备的软件包,里面包括只有在android3.0以上可以使用的API。使用它可以实现导航,页面菜单切换,APP引导页的功能。</span>

使用方式与ListView类似。需要一个适配器,PagerAdapter。

使用步骤:(***表示自己定义文件名)

【1】建立一个项目

【2】布局文件***.xml

<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:id="@+id/pagertab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"/>
</android.support.v4.view.ViewPager>

注意:ViewPager和PagerTabStrip必须把包名写全了,否则会产生ClassNotFound;还有PagerTabStrip只能当做ViewPager的子标签来使用。

           在PagerTabStrip标签中可以用属性android:layout_gravity="top/bottom"指定导航栏的位置;

          如果要显示出PagerTabStrip某一页的title,需要在ViewPager的adapter中实现getPagerTitle(int position)方法。所以我们要定义一个数组去保存title值

【3】***Activity.java中

首先应该想到有以下成员变量

    private ViewPager viewPager;  //ViewPager组件
    private PagerTabStrip pagerTabStrip;  //PagerTabStrip组件
    private MyPagerAdapter adapter;  //ViewPager的适配器

    private String[] titles = {"标题一", "标题二", "标题三", "标题四"};  //标题
    private ArrayList<View> views = new ArrayList<>();  //每个选项卡对应的布局

其次在onCreate()方法中实例化组件,并初始化选项卡对应的布局

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagertab);
        adapter = new MyPagerAdapter();
        initViews();
        viewPager.setAdapter(adapter);

initViews()方法中就是向链表views添加布局,使用LayoutInflater将布局转化为View对象

    private void initViews() {
        views.add(getLayoutInflater().inflate(R.layout.viewpager1_layout, null));
        views.add(getLayoutInflater().inflate(R.layout.viewpager2_layout, null));
        views.add(getLayoutInflater().inflate(R.layout.viewpager3_layout, null));
        views.add(getLayoutInflater().inflate(R.layout.viewpager4_layout, null));
    }

每个选项卡的布局根据实际情况自己设计,我这里只是有一个ImageView控件显示图片

接下来最重要的步骤之一是自定义MyPagerAdapter去继承PagerAdapter。

    //适配器
    class MyPagerAdapter extends PagerAdapter {
        @Override
        public int getCount() {
            return views.size();
        }

        //实例化选项卡
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View v = views.get(position);
            container.addView(v);
            return v;
        }

        //删除选项卡
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(views.get(position));
        }

        //判断当前是否为返回的选项卡对象
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        //获取标题
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
目前先达到会用,适配器具体的工作原理后面再深入研究
补充一个小知识点--》getPageTitle()方法中CharSequence类型;  String是java中的字符串,继承于CharSequence。CharSequence是一个接口。它只包括了length(),charAt(int index),subSequence(int start, int end)这几个API接口。

设置了适配器后就可以将标题,以及选项卡对应的布局意义对应起来。如果要实现滑动,还需要实现一个事件接口,在下面就贴出完整版代码吧

package com.example.uitest;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import java.util.ArrayList;

//ViewPager的使用
public class MainActivity extends Activity implements ViewPager.OnPageChangeListener{

    private ViewPager viewPager;
    private PagerTabStrip pagerTabStrip;
    private MyPagerAdapter adapter;

    private String[] titles = {"操作一", "操作二", "操作三", "操作四"};  //标题
    private ArrayList<View> views = new ArrayList<>();  //每个选项卡对应的布局

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagertab);
        adapter = new MyPagerAdapter();
        initViews();
        viewPager.setAdapter(adapter);
        pagerTabStrip.setTabIndicatorColor(getResources().getColor(android.R.color.holo_blue_bright));//标题栏指示器的颜色
        pagerTabStrip.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_light));  //标题栏背景颜色
        pagerTabStrip.setTextColor(Color.WHITE);  //设置标题字体颜色
        pagerTabStrip.setTextSize(1, 16);  //设置标题字体大小

        viewPager.setCurrentItem(1);//设定默认选中的
        viewPager.setOnPageChangeListener(this);
    }

    private void initViews() {
        views.add(getLayoutInflater().inflate(R.layout.viewpager1_layout, null));
        views.add(getLayoutInflater().inflate(R.layout.viewpager2_layout, null));
        views.add(getLayoutInflater().inflate(R.layout.viewpager3_layout, null));
        views.add(getLayoutInflater().inflate(R.layout.viewpager4_layout, null));
    }



    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        Toast.makeText(this, "当前选中的是第"+position+"个页面",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }

    //适配器
    class MyPagerAdapter extends PagerAdapter {
        @Override
        public int getCount() {
            return views.size();
        }

        //实例化选项卡
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View v = views.get(position);
            container.addView(v);
            return v;
        }

        //删除选项卡
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(views.get(position));
        }

        //判断当前是否为返回的选项卡对象
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        //获取标题
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值