• Android ViewPager初探:让页面滑动起来


    下一篇:《Android ViewPager再探:增加滑动指示条》

    ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写:

    instantiateItem(ViewGroup container, int position):创建指定位置的页面视图。适配器增加即将创建的View视图到这里给定的container中。
    destroyItem(ViewGroup container, int position, Object object):移除一个给定位置的页面。
    getCount():返回当前有效视图的个数。
    isViewFromObject(View view, Object object):判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图。

    主界面的布局只要加上

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

    即可:

    activity_main.xml:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2                 xmlns:tools="http://schemas.android.com/tools"
     3                 android:layout_width="match_parent"
     4                 android:layout_height="match_parent"
     5                 tools:context=".MainActivity">
     6 
     7     <android.support.v4.view.ViewPager
     8         android:id="@+id/viewpager"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:layout_gravity="center"/>
    12 
    13 </RelativeLayout>

    决定ViewPager有3个页面,每个页面都要写布局:

    以第一个first_page.xml为例:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3               android:layout_width="match_parent"
     4               android:layout_height="match_parent">
     5     <TextView
     6         android:layout_width="match_parent"
     7         android:layout_height="match_parent"
     8         android:gravity="center"
     9         android:text="这是第一页"
    10         android:textSize="20sp"/>
    11 
    12 </RelativeLayout>

    MainActivity需要在onCreate里对其初始化,并调用适配器:

     1 package com.example.hopecapital.myapplication;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.support.v4.view.ViewPager;
     6 import android.view.LayoutInflater;
     7 import android.view.View;
     8 
     9 import java.util.ArrayList;
    10 import java.util.List;
    11 
    12 
    13 public class MainActivity extends Activity {
    14     private View first,second,third;
    15     private ViewPager viewPager;//对应 <android.support.v4.view.ViewPager/>控件
    16     private List<View> viewList;//View数组
    17 
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_main);
    22 
    23         /*初始化*/
    24         viewPager = (ViewPager)findViewById(R.id.viewpager);
    25         LayoutInflater inflater = getLayoutInflater();
    26         first = inflater.inflate(R.layout.first_page,null);
    27         second = inflater.inflate(R.layout.second_page,null);
    28         third = inflater.inflate(R.layout.third_page,null);
    29 
    30         viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
    31         viewList.add(first);
    32         viewList.add(second);
    33         viewList.add(third);
    34 
    35         /*适配器部分*/
    36         NewPagerAdapter pagerAdapter = new NewPagerAdapter(viewList);
    37         viewPager.setAdapter(pagerAdapter);
    38     }
    39 
    40 }

    最后也是最重要的,继承自PagerAdapter的适配器:

    NewPagerAdapter.java:

     1 package com.example.hopecapital.myapplication;
     2 
     3 import android.support.v4.view.PagerAdapter;
     4 import android.view.View;
     5 import android.view.ViewGroup;
     6 
     7 import java.util.List;
     8 
     9 /**
    10  * Created by LT on 2015/7/27.
    11  */
    12 public class NewPagerAdapter extends PagerAdapter{
    13     public List<View> viewList;
    14 
    15     public NewPagerAdapter(List<View> viewList){
    16         this.viewList = viewList;
    17     }
    18 
    19     /*下面四个函数是一定要重写的*/
    20     @Override
    21     public boolean isViewFromObject(View arg0,Object arg1){
    22     //判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(判断key)
    23         // TODO Auto-generated method stub
    24         return arg0 == arg1;
    25     }
    26 
    27     @Override
    28     public int getCount() {//返回要滑动的VIew的个数
    29         // TODO Auto-generated method stub
    30         return viewList.size();
    31     }
    32 
    33     @Override
    34     public void destroyItem(ViewGroup container, int position,
    35                             Object object) {//从当前container中删除指定位置(position)的View;
    36         // TODO Auto-generated method stub
    37         container.removeView(viewList.get(position));
    38     }
    39 
    40     @Override
    41     public Object instantiateItem(ViewGroup container, int position) {
    42     //实例化:将当前视图添加到container中,并返回当前View(传送key)
    43         // TODO Auto-generated method stub
    44         container.addView(viewList.get(position));
    45 
    46         return viewList.get(position);
    47     }
    48 }

    以上,便完成了简单的ViewPager。

    ————————————————————————————————————————————————
    来自企鹅娘的问候:
    欢迎交流哦,如果有帮助转载的话,请务必注明出处"企鹅娘's 学习笔记",让我也小小的开心一下
  • 相关阅读:
    DirectX11--实现一个3D魔方(2)
    DirectX11--实现一个3D魔方(1)
    DirectX11 With Windows SDK--25 法线贴图
    DirectX11--ComPtr智能指针
    DirectX11--教程项目无法编译、运行的解决方法
    DirectX11--HR宏关于dxerr库的替代方案
    DirectX11--HLSL编译着色器的三种方法
    一封来自恶魔的挑战邀请函,那些你见过或者没见过的C语言指针都在这里了
    DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
    DirectX11 With Windows SDK--23 立方体映射:动态天空盒的实现
  • 原文地址:https://www.cnblogs.com/hopecapital/p/4681939.html
Copyright © 2020-2023  润新知