ViewPager 是 AdapterView 模式修改后的实现,ListView 和 GridView 小部件也使用了框架的这种模式。ViewPager 需要一个继承自 PagerAdpter 的子类适配器来实现。
ViewPager 本身不能实现分页控件的回收,但它每时每刻都提供了回调方法来进行条目的创建和销毁。所以在特定的时间内,内存中运行的内容视图的数量是固定的(屏幕以外的页数默认限制值为 3,跟踪页面的编号总是围绕着当前可见的页面居中进行的)。效果如下:
图一:
图二:
ImagePagerAdapter.java :
package com.crazy.viewpagertest;
import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class ImagePagerAdapter extends PagerAdapter {
private Context mContext;
private static final int[] IMAGES = {
R.drawable.bg_01, R.drawable.bg_02, R.drawable.bg_03,
R.drawable.bg_04, R.drawable.bg_05
};
private static final int[] COLORS = {
Color.RED, Color.BLUE, Color.GREEN,
Color.GRAY, Color.MAGENTA
};
public ImagePagerAdapter(Context context) {
super();
mContext = context;
}
/**
* 页面的总数
*/
@Override
public int getCount() {
return IMAGES.length;
}
/**
* 如果需要在 ViewPager 内一次显示超过一页的内容,那么需要重写该方法
*/
@Override
public float getPageWidth(int position) {
return 1f;
// 每个页面的宽度是视图的 1/3 (如效果图2)
// return 0.333f;
}
/**
* 返回唯一的键对象来表示某个条目(此处是 imageView)
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 创建一个新的 ImageView 并把它添加到提供的容器中
ImageView imageView = new ImageView(mContext);
// 设置此位置的内容
imageView.setImageResource(IMAGES[position]);
imageView.setBackgroundColor(COLORS[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
// 添加视图
container.addView(imageView);
return imageView;
}
/**
* 当创建的新视图或者某个视图滚动超出了页数限制的范围后,
* 需要删除该视图时,就会分别调用 instantiateItem() 和 destroyItem()
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// 从容器中删除视图
container.removeView((View)object);
}
/**
* 把从 instantiateItem() 返回的 view 关联到给定的 ViewGroup 上(不一定要相等)。
*/
@Override
public boolean isViewFromObject(View view, Object object) {
// 检查从 instantiateItem() 返回的对象与添加到容器相应位置的视图是否是同一个对象。
// 此处是同一个对象
return (view == object);
}
}
MainActivity.java :
package com.crazy.viewpagertest;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewPager viewPager = new ViewPager(this);
viewPager.setAdapter(new ImagePagerAdapter(this));
setContentView(viewPager);
}
}
ViewPager与ImagePagerAdapter的实现详解
本文详细介绍了ViewPager作为AdapterView模式的实现,及其如何通过自定义ImagePagerAdapter适配器来展示图片。重点阐述了ImagePagerAdapter类的实现,包括获取页面总数、设置页面宽度、创建与销毁页面视图的方法。
1723

被折叠的 条评论
为什么被折叠?



