android 中viewPager小结

ViewPager中文为页卡。能够实现视图的滑动效果,它需要和PagerAdapter一起使用,PagerAdapter是在ViewPager切换视图时提供给它一些数据和数据的管理。


   视图滑动的效果需要三个步骤实现:

 1:在布局文件中创建

     <android.support.v4.view.ViewPager
         android:id="@+id/vpMain"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
      />此标签。

          注意:此标签的位置是根据自己的需求来给定它的位置的,可以自己决定切换的位置和切换区域的大小。

          

[html]  view plain  copy
  1. <pre name="code" class="html"><LinearLayout 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.     android:orientation="vertical"  
  6.      >  
  7.   
  8.       
  9.     <TextView   
  10.         android:id="@+id/tvText"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="wrap_content"  
  13.         android:text="手机滑屏"  
  14.         android:textSize="30sp"/>  
  15.       
  16.     <!-- 切换视图区域-->  
  17.     <android.support.v4.view.ViewPager  
  18.        android:id="@+id/vpMain"  
  19.        android:layout_width="match_parent"  
  20.        android:layout_height="wrap_content"  
  21.         />  
  22.       
  23.       
  24. </LinearLayout>  
 

2:创建要切换的布局文件

3:在Activity中加载布局文件,用ViewPager.setPagerAdapter(PagerAdapter的对象);来关联页面管理器。使用LayoutInflater类来加载布局文件。

     

[java]  view plain  copy
  1. package com.example.huadong;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.support.v4.view.PagerAdapter;  
  6. import android.support.v4.view.ViewPager;  
  7. import android.support.v7.app.ActionBarActivity;  
  8. import android.text.Layout;  
  9. import android.view.LayoutInflater;  
  10. import android.view.View;  
  11. import android.os.Bundle;  
  12.   
  13. public class MainActivity extends ActionBarActivity {  
  14.     //定义一个队列来保存各个布局文件  
  15.         ArrayList<View> list_view= new ArrayList<View>();  
  16.           
  17.     @Override  
  18.     protected void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.fragment_main);  
  21.         //初始化页卡对象  
  22.         ViewPager mainview =(ViewPager) findViewById(R.id.vpMain);  
  23.           
  24.         //获取界面的布局加载器,将布局文件加载到程序中  
  25.         LayoutInflater inflater=getLayoutInflater();  
  26.         //第二种方式: inflater=LayoutInflater.from(this);  
  27.          
  28.         //将布局加载到程序中  
  29.         View first =inflater.inflate(R.layout.first, null);  
  30.         View second=inflater.inflate(R.layout.second, null);  
  31.         View three =inflater.inflate(R.layout.three, null);  
  32.         list_view.add(first);  
  33.         list_view.add(second);  
  34.         list_view.add(three);  
  35.         //定义一个页面管理器  
  36.         PagerAdapter pageadapt=new PagerAdapter() {  
  37.               
  38.             public boolean isViewFromObject(View arg0, Object arg1) {  
  39.                 return arg0==arg1;  
  40.             }  
  41.               
  42.         public Object instantiateItem(android.view.ViewGroup container, int position) {  
  43.             container.addView(list_view.get(position));  
  44.                   return list_view.get(position);  
  45.               
  46.         };  
  47.             public void destroyItem(android.view.ViewGroup container, int position, Object object) {  
  48.                 container.removeView(list_view.get(position));  
  49.             };  
  50.               
  51.             public int getCount() {  
  52.                 return list_view.size();  
  53.             }  
  54.             };  
  55.               
  56.        mainview.setAdapter(pageadapt);  
  57.     }  
  58.   
  59.   
  60. }  


注意:实现PagerAdapter时,必须要实现该类中的4个方法:

                  a:public boolean isViewFromObject(View arg0, Object arg1) {};

         b:public Object instantiateItem(android.view.ViewGroup container, int position) {};

         c:public void destroyItem(android.view.ViewGroup container, int position, Object object){};

         d:public int getCount(){};

       方法a:是根据方法b返回的一个键值,判断键值所对应的View视图和方法b中添加的View视图是否一致,及判断是否是同一个View。

      方法b:向ViewGroup中添加下一个将要显示的View,所以方法a:就是判断下一个将要显示的View是否正确。

       注意:ViewGroup中最多只有3个视图:当前正在显示的视图;正在显示视图的下一个视图;和正在显示视图的上一个视图。

     特殊情况是:第一次进入程序时,要执行两次方法b:第一次是将队列中的第一张视图显示出来,第二次是将下一个将要展示的视图正确的存入ViewGroup中。当前后不能切换时,只是执行方法d.

              方法c: 会根据传入的position参数来移除ViewGroup中的指定视图,主要是保证ViewGroup中最多存在3个视图。

     方法d: 在第一次进入程序是会首先执行两次,返回的值是切换视图的总数,此方法在用户触摸屏幕过程中会一直执行。当返回值大于总的视图数时,会出现文件找不到的异常,当返回值小于总的视图数时,会出现有些视图不能显示的问题。产生的原因是:方法d 返回整个视图队列的长度,后台程序会根据这个长度来设置加载和删除视图的上限。后台根据方法d 的返回值和用户切换的方向来给出position参数的值,即需要加载或移除视图在视图队列中的下标。此下标的最大值比方法d 的返回值小1。因为下标是从0开始。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值