首页

ViewPager

搜索

概述
android的左右滑动在实际编程经常能用到,比如查看多张图片,左右切换tab页。早期通用做法
是使用ViewFlipper,自Android 3.0之后的SDK中提供了android-support-v4包用以实现版本兼容
让老版本系统下的应用通过加入」ar包实现扩展,其中有一个可以实现左右滑动的类ViewPager
ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup专门用以实现
左右滑动切换View的效果。
首先在Project->properties->Java Build Path->Libraries->Add ExternalJars中加入sdk目录
下的extras/android/support/v4/android-support-v4.jar(如果找不到,则需要用sdk manager下
载android support package)。加入这个jar包之后就可以使用ViewPager类了。
然后,ViewPager的使用类似于ListView,需要有对应的Adapter进行数据绑定,实现图片切换
需要继承PaperAdapter
创建一个适配器类继承自PagerAdapter,包含子View的集合,重写相关方法。

使用步骤
实现以下左右拖动切换图片的效果

图一2
步骤1、创建项目,在项目中创建libs文件夹,在该文件夹中导入。ndroid-suppert-v4jar包。如图-3所示:

图三

步骤2、右击项目名,在弹出的菜单中选择Properties项,出现图一4,按图一4所示操作:

图四

步骤3、出现图一5,按图一5所示操作:

图五

图六

步骤4、将以下图片文件复制到res/d rawabIe-mdpi文件夹下,如图一4所示:

图七

步骤5、在main.xml中输入以下代码:
<?xml version= "1.0" encoding= "utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas. android. com/a pk/res/android "
android:id= "@+id/pager"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent"/>
步骤6、在项目入口文件中输入以下代码:
public class Day08 07_ ViewPaggerActivity extends Activity{
//步骤1, getViews()创建需要显示的四个图片的ImageView,结果存放在集合中
private ArrayList<View> getViews(){
ArrayList<View> views=new ArrayList<View> ();
ImageView iv=new ImageView(this);
iv.setImageResource(R.drawable.p01};
iv.setScaleType(ScaleType.FIT_CENTER};
views.add(iv);
iv=new ImageView(this);
iv.setImageResource(R.drawable.p02);
iv.setScaleType(ScaleType.FIT CENTER};
views.add(iv);
iv=new ImageView(this);
iv.setImageResource(R.drawable.p03);
iv.setScaleType(ScaleType.FIT CENTER};
views.add(iv);
iv=new ImageView(this);
iv.setImageResource(R.drawable.p04);
iv.setScaleType(ScaleType.FIT CENTER};
views.add(iv);
iv=new ImageView(this);
iv.setImageResource(R.drawable.p05);
iv.setScaleType(ScaleType.FIT CENTER};
views.add(iv);
return views;
}

/*步骤2、自定义MyAdapter类,该类为ViewPager的适配器
*继承自PaperAdapter类*/
private class MyAdapter extends PagerAdapter{
//存放图片的集合
private ArrayList<View> views;
//构造方法
public MyAdapter(ArrayList<View> views){
if(views!=null
this.views=views;
else
this.views=new ArrayList<View>();
}
//用以控制当某个View不需要的时候的回收处理。
@Override
publicvoid destroyItem(View pager, int position, Object arg2){
Log.i("info","adapter.destroyItem()");
View view=views.get(position);
((ViewPager)pager).removeView(view);
}
//完成更新操作
@Override
publicvoid finishUpdate(View arg0){
Log.i("info","adapter.finishUpdate()");
}
//获取集合数据的长度
@Override
public int getCountQ{
Log.i("info","adapter.getCount");
return views.size();
}
//获取每个View
@Override
public Object instantiateItem(View pager, int position){
Log.i("info","adapter.instantiateItem()");
View view=views.get(position);
((ViewPager)pager).addView(view);
return view;
//用来实现判断View和Object是否为同一个View
@Override
public Boolean isViewFromObject(View arg0, Object argl){
Log.i("info","adapter.isViewFromObject()");
return arg0==argl;
}
@Override
public void restoreState(Parcelable arg0, CIassLoader argl){
@Override
public Parcelable saveState(){
return null;
@Override
publicvoid startUpdate(View arg0){
Log.i("info","adapter.startUpdate()");
//步骤3、定义以下两个成员变量
private ViewPager pager;
private MyAdapter adapter;
/*步骤4、定义setupView()实例化ViewPager类,实例化适配器类
设置ViewPage对象与适配器相关。
*/
private void setupView(){
pager=(ViewPager)findViewById(R.id.pager);
adapter=new MyAdapter(getViews());
pager.setAdapter(adapter);
}
//步骤5、在onCreate()中调用setupView()
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupView();
}


上一页 下一页