ViewPager的作用
ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。ViewPager用于实现多页面的切换效果。该类存在于Google的兼容包里(android.support.v4.view.ViewPager。)
ViewPager的使用
ViewPager直接继承于ViewGroup,是一个容器类控件,可以在其中添加其他的View
ViewPager需要通过PagerAdapter适配器来提供数据
ViewPager通常与Fragment连用,有FragmentPagerAdapter和FragmentStatePagerAadapter 来提供Fragment给ViewPager
ViewPager的使用步骤
- 在布局文件定义ViewPager组件(android.support.v4.view.ViewPager)
- 在Activity中设置ViewPAger放置的内容
- 给ViewPager对象设置适配器
实现PagerAdapter需重写的方法
- instantiateItem(ViewGroup, int) :根据指定的下标创建viewpager当中pager页
- destoryItem(ViewGroup,int,Object):根据指定的下标移除ViewPager中的pager页
- getCount():当前适配器加载的数据条目
- isViewFromObject(View,Object):判断viewpager中加载的view和instantiateItem实例化的view是不是一致的
ViewPager监听页面改变(OnPageChangeListener)
vp.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 页面被选中时回调的方法
* position :表示页面的位置
* */
@Override
public void onPageSelected(int position) {
}
/**页面滚动时回调的方法
* position:当前页面向下滑动的角标
* positionOffset:当前页面滑动的偏移量
* positionOffsetPixels:当前页面滑动的偏移量对应的像素值
* */
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/**当页面滚动状态改变时回调的方法
* 参数包含三种状态:
* SCROLL_STATE_IDLE :停止状态
SCROLL_STATE_DRAGGING:滚动状态
SCROLL_STATE_SETTLING:选中状态
* */
@Override
public void onPageScrollStateChanged(int position) {
}
});
}
PagerTitleStrip和PagerTabStrip的使用
两者的区别:
1.PagerTabStrip的底部有一条下划线,选中项的下划线可以改变颜色并且加粗的
2.PagerTabStrip是可以被点击的,可以与ViewPager交互,而PagerTabStrip是不能点击的-
实例:PagerTabStrip+ViewPager
布局文件:
<RelativeLayoutxmlns: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.support.v4.view.ViewPagerandroid:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/vp" > <android.support.v4.view.PagerTabStrip android:id="@+id/titlestrip" android:layout_width="wrap_content" android:layout_height="wrap_content" > </android.support.v4.view.PagerTabStrip> </android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:layout_marginBottom="50dp" android:layout_marginLeft="150dp" > <ImageView android:id="@+id/iamge1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginRight="20dp" android:background="@drawable/white"/> <ImageView android:id="@+id/iamge2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginRight="20dp" android:background="@drawable/white"/> <ImageView android:id="@+id/iamge3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginRight="20dp" android:background="@drawable/white"/> <ImageView android:id="@+id/iamge4" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginRight="20dp" android:background="@drawable/white"/> </LinearLayout> </RelativeLayout>`
MainActivity.java
public class MainActivity extends Activity {
private ViewPager viewPager;
private PagerTabStrip pagerTabStrip;
private int [] images= {R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.a};
private List<ImageView> list;
private ImageView icons[];
private List<String> title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.vp);
pagerTabStrip = (PagerTabStrip) findViewById(R.id.titlestrip);
list = new ArrayList<ImageView>();
for (int i = 0; i < images.length; i++) {
ImageView iV = new ImageView(this);
iV.setBackgroundResource(images[i]);
list.add(iV);
}
pagerTabStrip.setDrawFullUnderline(false);
pagerTabStrip.setBackgroundColor(Color.RED); //设置背景颜色
pagerTabStrip.setTabIndicatorColor(Color.GREEN);
title = new ArrayList<String>();
title.add("女一");
title.add("女二");
title.add("女三");
title.add("女si");
MyPageAdapter adapter = new MyPageAdapter();
viewPager.setAdapter(adapter);
initicon();
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/**页面选中时回调的方法
* arg0:页面的位置
*/
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
for (int i = 0; i < images.length; i++) {
icons[i].setImageResource(R.drawable.white);
}
icons[arg0].setImageResource(R.drawable.blue);
}
/**
* 页面滚动回调的方法
* arg:当前页面向下滑动的的角标
* arg1:当前页面滑动的偏移量
* arg2;当前页面滑动偏移量对应的像素值
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
/**
* 页面滚动时回调的方法
*/
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
//初始化指示图标
private void initicon(){
LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
icons = new ImageView[images.length];
for (int i = 0; i < icons.length; i++) {
icons[i] = (ImageView) layout.getChildAt(i);//找到已知布局中的子控件
icons[i].setImageResource(R.drawable.white);
icons[i].setTag(i);
icons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("info0", (Integer)v.getTag()+"");
viewPager.setCurrentItem((Integer)v.getTag());
}
});
}
icons[0].setImageResource(R.drawable.blue);
}
class MyPageAdapter extends PagerAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(list.get(position));
Log.i("info1", position+"");
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.i("info2", position+"");
container.removeView(list.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return title.get(position);
}
}
}