ViewPager 的使用
ViewPager的功能是让页面能随手势左右滑动而滑动。
首先准备三张页面,layout1,layout2,layout3,代码如下;
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/layout1"
android:background="#aa0000">
<TextView android:id="@+id/view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="one"/>
</RelativeLayout>
三个页面代码差不多,只是id不同,text值分别为one,two,three;
然后是主页面的代码,main.xml;
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<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/pager_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"/>
</android.support.v4.view.ViewPager>
</RelativeLayout>
其中android.support.v4.view.ViewPager 是主体内容,android.support.v4.view.PagerTabStrip是顶栏TAB。
然后是MainActivity代码;
package com.example.demo1;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.app.Activity;
public class MainActivity extends Activity {
private View view1;
private View view2;
private View view3;
private ArrayList<View> viewList;
private ViewPager viewPager;
private ArrayList<String> titleList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager)findViewById(R.id.viewpager);
LayoutInflater tInflater = getLayoutInflater();
view1 = tInflater.inflate(R.layout.layout1, null);
view2 = tInflater.inflate(R.layout.layout2, null);
view3 = tInflater.inflate(R.layout.layout3, null);
viewList = new ArrayList<View>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
titleList = new ArrayList<String>();
titleList.add("yi");
titleList.add("er");
titleList.add("san");
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
System.out.println("选中");
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
System.out.println("旋转");
}
@Override
public void onPageScrollStateChanged(int arg0) {
System.out.println("改变");
}
});
}
PagerAdapter pagerAdapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
// System.out.println("cur positon======"+position);
return viewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public int getCount() {
// System.out.println("size =========="+viewList.size());
return viewList.size();
}
};
}
ViewPager跟ListView一样,需要一个适配器来相辅,这个适配器的名字叫做PagerAdaper;
首先是适配器的用法,很简单,三步:
一找到要显示的内容,显示的内容为三张页面,也就是三个layout,通过LayoutInflater来加载,存放在一个list里;
二找到要显示(内容)的容器,容器是android.support.v4.view.ViewPager,通过findViewById找到;
三设置适配器;setAdaper。
然后是重写PagerAdaper,里面有四个方法必须,一为isViewFromObject,从名字可以看出是干嘛的;二为getCount,得到view的个数;三为instantiateItem,增加页面;四为destroyItem,删除页面;都很简单,通过代码就能理解意思。
最后是整个demo的执行顺序:
首先自然是onCreate;
然后一直顺序往下到setAdapter;
然后跳到PagerAdaper里,首先执行的是getCount,这个方法会一直执行,直到一个页面被停下来,也就是手指不再滑动,而这个方法也是PagerAdaper的关键;
然后是instantiateItem方法,当position发生改变时,会调用此方法;
而destroyItem内也有一个position,但是这个position比instantiateItem中的要小2,也就是说当加载到第三张页面时,第一张页面才会被删除。