//布局
<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" >
<TextView
android:id="@+id/show_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#88000000"
android:gravity="center"
android:textColor="#fff"
android:textSize="25sp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/show_info" />
</RelativeLayout>
//代码
public class MainActivity extends Activity implements OnPageChangeListener {
private TextView show_info;
private ViewPager viewpager;
private MypagerAdapter adapter;
private List<View> imgList = new ArrayList<View>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取arrays中的资源对象
// 第二种方式
TypedArray typedArray = getResources().obtainTypedArray(R.array.img);
for (int i = 0; i < typedArray.length(); i++) {
ImageView imageview = new ImageView(this);
imageview.setImageDrawable(typedArray.getDrawable(i));
// 当到一个集合中,方便销毁时调用
imgList.add(imageview);
}
show_info = (TextView) this.findViewById(R.id.show_info);
viewpager = (ViewPager) this.findViewById(R.id.viewpager);
// adapter = new MypagerAdapter();//第一种
adapter = new MypagerAdapter(imgList);// 第二种
viewpager.setAdapter(adapter);
// 显示头部的提示当前多少也,总页数
show_info.setText(1 + "/" + adapter.getCount());
// 实现监听方法
viewpager.setOnPageChangeListener(this);
}
// 使用ViewPager必须要继承PagerAdapter 或者FragmentPagerAdapter
class MypagerAdapter extends PagerAdapter {
// 设置数据源 :图片资源
// 两种方式设置资源 :1.定义资源数组 2.arrays.xml定义————》drawable view
// 第一种方法
private int[] img = { R.drawable.car0, R.drawable.car1,
R.drawable.car2, R.drawable.car3, R.drawable.car4,
R.drawable.car5, R.drawable.car6, R.drawable.car7, };
private List<View> imgList;
@Override
public int getCount() {
// return img.length;
return this.imgList.size();
}
public MypagerAdapter(List<View> imgList) {
this.imgList = imgList;
}
public MypagerAdapter() {
}
@Override
public boolean isViewFromObject(View view, Object obj) {
// 判断当前的视图是否是一个对象,官方文档建议这样写
return view == obj;
}
// 下面两个方法要自己手动重写
@Override
// ,每次滑动时都会调用,实例化当前视图。把一个view放在当前的ViewPager位置中
public Object instantiateItem(ViewGroup container, int position) {
// 第一种:
// // 上下文可以上面传进来,也可以用下面的方式获取
// ImageView imageview = new ImageView(container.getContext());
// imageview.setImageResource(img[position]);
// // 记得要把imageview放进当前container(属于pagerVeiw)
// container.addView(imageview);
// // 并且记得返回视图
// return imageview;
// 第二种;方式
container.addView(this.imgList.get(position));
return this.imgList.get(position);
}
@Override
// 销毁滑出去的view,position和当前位置相差1左右,(有缓存)考虑滑回去的缓存
public void destroyItem(ViewGroup container, int position, Object object) {
// 如果用图片资源数组无法销毁,所以建议用arrays.xml定义资源,放进一个list集合方便删除
// super.destroyItem(container, position, object);
// 第一种方式实现时要把super这个去掉,否则会报错
// 第二种:
container.removeView(this.imgList.get(position));// 用arrays.xml定义资源一定要销毁,否则回报错
}
}
@Override
// 页面滚动的状态改变
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_DRAGGING:// 拖动状态
break;
case ViewPager.SCROLL_STATE_IDLE:// 停止状态
break;
case ViewPager.SCROLL_STATE_SETTLING:// 处于自动滚动时状态
break;
}
}
@Override
// 参数:1、位置,2、位置 的偏移量,3、位置偏移量的像素
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixel) {
}
@Override
public void onPageSelected(int position) {
// 设置显示滑动当前的位置改变
show_info.setText((position + 1) + "/" + adapter.getCount());
}
}
//数组文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="img">
<item>@drawable/car0</item>
<item>@drawable/car1</item>
<item>@drawable/car2</item>
<item>@drawable/car3</item>
<item>@drawable/car4</item>
<item>@drawable/car5</item>
<item>@drawable/car6</item>
<item>@drawable/car7</item>
</array>
</resources>
转载于:https://my.oschina.net/u/2541146/blog/625283