UI控件--ViewPager详解(1)

一、首先在总布局文件中引入ViewPager控件

<LinearLayout
    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:orientation="vertical"
    tools:context="com.lingzhuo.testviewpager.MainActivity">

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

二、新建三个布局界面,用于滑动切换的视图

  • layout_pager1.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:background="@color/colorAccent"
    android:orientation="vertical">

</LinearLayout>
  • layout_pager2.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:background="@color/colorPrimary"
    android:orientation="vertical">

</LinearLayout>
  • layout_pager3.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:background="@color/colorPrimaryDark"
    android:orientation="vertical">

</LinearLayout>

代码中逻辑的实现

  • 总体代码如下
public class MainActivity extends AppCompatActivity {
    private List<View> list=new ArrayList<>();
    private ViewPager viewPager;
    private View view1,view2,view3;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        LayoutInflater inflater=getLayoutInflater();
        view1=inflater.inflate(R.layout.layout_pager1,null);
        view2=inflater.inflate(R.layout.layout_pager2,null);
        view3=inflater.inflate(R.layout.layout_pager3,null);
        //将三个页面分别加入list中
        list.add(view1);
        list.add(view2);
        list.add(view3);
        PagerAdapter pagerAdapter=new PagerAdapter() {
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(list.get(position));
                return list.get(position);
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(list.get(position));
            }

            @Override
            public int getCount() {
                return list.size();
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view==object;
            }
        };
        viewPager.setAdapter(pagerAdapter);

    }

    private void init() {
        viewPager= (ViewPager) findViewById(R.id.viewPager);
    }
}
  • 变量声明阶段
  • 声明一个list用于存放三个滑动的界面
  • view1,view2,view3是三个界面
  • viewPager同时声明
    private List<View> list=new ArrayList<>();
    private ViewPager viewPager;
    private View view1,view2,view3;
  • 而后在代码中进行各个变量的实例化
  • 同时将三个页面实例添加到list中
        LayoutInflater inflater=getLayoutInflater();
        view1=inflater.inflate(R.layout.layout_pager1,null);
        view2=inflater.inflate(R.layout.layout_pager2,null);
        view3=inflater.inflate(R.layout.layout_pager3,null);
        list.add(view1);
        list.add(view2);
        list.add(view3);
  • PageAdapter——PageView的适配器
  • 在PageAdapter中必须重写的方法有四个
  • PageAdapter 必须重写的四个函数:
    • boolean isViewFromObject(View arg0, Object arg1)
    • int getCount()
    • void destroyItem(ViewGroup container, int position,Object object)
    • Object instantiateItem(ViewGroup container, int position)
            @Override
            public int getCount() {
                return list.size();
            }
  • getCount():返回要滑动的VIew的个数
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(list.get(position));
            }
  • destroyItem():从当前container中删除指定位置(position)的View;
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(list.get(position));
                return list.get(position);
            }
  • instantiateItem():做了两件事,第一:将当前视图添加到container中,第二:返回当前View
            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view==object;
            }
  • isViewFromObject():对于这个函数就先不做讲解,大家目前先知道它要这样重写就行了,后面我们会对它进行改写。

  • 效果示意图
    这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值