ViewPager 的简单使用(一)
2015-12-17 21:26
281 查看
ViewPager 是 AdapterView 模式修改后的实现,ListView 和 GridView 小部件也使用了框架的这种模式。ViewPager 需要一个继承自 PagerAdpter 的子类适配器来实现。
ViewPager 本身不能实现分页控件的回收,但它每时每刻都提供了回调方法来进行条目的创建和销毁。所以在特定的时间内,内存中运行的内容视图的数量是固定的(屏幕以外的页数默认限制值为 3,跟踪页面的编号总是围绕着当前可见的页面居中进行的)。效果如下:
图一:
图二:
ImagePagerAdapter.java :
MainActivity.java :
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); } }
相关文章推荐
- LeetCode 018 4sum
- java中静态代理,动态代理知识的补充
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
- koa 第一课
- Linux——Linux 文件系统基本结构
- java 集合框架
- 我们眼中的2015年互联网10大产品事件
- datomic数据库——ACID(1)
- Mapreduce代码编写问题汇总
- 漫谈 Clustering (1): k-means
- React架构、设计思想
- System.exit()方法的作用
- linux => Linux下的Notepad++编辑器——Notepadqq
- 欢迎使用CSDN-markdown编辑器
- LeetCode 190:Reverse Bits
- 多语言对比
- Openwrt UCI 快捷切换SS 配置
- JAVA布局基础正确源代码
- 第十四周(项目一)--二叉排序树相关算法
- OBJECT和EMBED标签