Android中的ViewPager和 PagerAdapter的初步理解和使用
2015-08-08 21:49
706 查看
ViewPager中文为页卡。能够实现视图的滑动效果,它需要和PagerAdapter一起使用,PagerAdapter是在ViewPager切换视图时提供给它一些数据和数据的管理。
视图滑动的效果需要三个步骤实现:
1:在布局文件中创建
<android.support.v4.view.ViewPager
android:id="@+id/vpMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>此标签。
注意:此标签的位置是根据自己的需求来给定它的位置的,可以自己决定切换的位置和切换区域的大小。
2:创建要切换的布局文件
3:在Activity中加载布局文件,用ViewPager.setPagerAdapter(PagerAdapter的对象);来关联页面管理器。使用LayoutInflater类来加载布局文件。
注意:实现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开始。
视图滑动的效果需要三个步骤实现:
1:在布局文件中创建
<android.support.v4.view.ViewPager
android:id="@+id/vpMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>此标签。
注意:此标签的位置是根据自己的需求来给定它的位置的,可以自己决定切换的位置和切换区域的大小。
<pre name="code" class="html"><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" > <TextView android:id="@+id/tvText" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="手机滑屏" android:textSize="30sp"/> <!-- 切换视图区域--> <android.support.v4.view.ViewPager android:id="@+id/vpMain" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
2:创建要切换的布局文件
3:在Activity中加载布局文件,用ViewPager.setPagerAdapter(PagerAdapter的对象);来关联页面管理器。使用LayoutInflater类来加载布局文件。
package com.example.huadong; import java.util.ArrayList; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBarActivity; import android.text.Layout; import android.view.LayoutInflater; import android.view.View; import android.os.Bundle; public class MainActivity extends ActionBarActivity { //定义一个队列来保存各个布局文件 ArrayList<View> list_view= new ArrayList<View>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); //初始化页卡对象 ViewPager mainview =(ViewPager) findViewById(R.id.vpMain); //获取界面的布局加载器,将布局文件加载到程序中 LayoutInflater inflater=getLayoutInflater(); //第二种方式: inflater=LayoutInflater.from(this); //将布局加载到程序中 View first =inflater.inflate(R.layout.first, null); View second=inflater.inflate(R.layout.second, null); View three =inflater.inflate(R.layout.three, null); list_view.add(first); list_view.add(second); list_view.add(three); //定义一个页面管理器 PagerAdapter pageadapt=new PagerAdapter() { public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } public Object instantiateItem(android.view.ViewGroup container, int position) { container.addView(list_view.get(position)); return list_view.get(position); }; public void destroyItem(android.view.ViewGroup container, int position, Object object) { container.removeView(list_view.get(position)); }; public int getCount() { return list_view.size(); } }; mainview.setAdapter(pageadapt); } }
注意:实现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开始。
相关文章推荐
- Android View(一)
- AndroidAnnotations使用
- 设置一个简单的安卓启动页面
- 【Android先进】我们为什么要创建Activity基类Activity什么是一般的基类方法
- android学习笔记(5)Activity生命周期学习
- android studio
- 【Android资料】Android软键盘显示模式总结
- 【干货】Android studio教程与问题汇总
- AndroidStudio中修改包名
- androidSQLite小工具
- Android开发 关于Android性能,内存优化
- 在ubuntu12.04下编译android4.1.2添加JNI层出现问题
- Android中关于键盘的操作
- Android开发 圆形ImageView类
- Activity的4种加载模式解析:
- android代码签名和混乱的包装
- Android 5.1 Phone MO(去电)流程分析(Framework层)
- Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes
- 《Android应用性能优化》第一章 Java代码优化
- 获取Android系统的联系人信息