ViewPager
来源:互联网 发布:淘宝usa商城 假货 编辑:程序博客网 时间:2024/06/05 10:29
实现ViewPager滑动
(滑动但不循环)
1、创建一个Activity类
2、创建一个布局,里面有个ViewPager组件
<android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" />
3、(一、得到组件)在Activity类里实例化组件,并引用上述布局
private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_viewpager_layout); mViewPager = (ViewPager) findViewById(R.id.viewPager);
4、(二、建立数据源)创建多个布局(ViewPager里的每一页的布局),在Activity里得到布局,并放入一个数列集合
View v1 = LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item1_layout, null);View v2 = LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item2_layout, null);View v3 = LayoutInflater.from(this).inflate(R.layout.activity_viewpager_item3_layout, null);ArrayList<View> arrayList = new ArrayList<View>();arrayList.add(v1);arrayList.add(v2);arrayList.add(v3);
5、(三、创建适配器)
//滑动不循环public class MyViewPagerAdapter2 extends PagerAdapter{ private ArrayList<View> arrayList = new ArrayList<View>(); private LayoutInflater layoutInflater; public MyViewPagerAdapter2(Context context){ layoutInflater = LayoutInflater.from(context); } public void setData(ArrayList<View> arrayList){ this.arrayList = arrayList; notifyDataSetChanged(); } @Override public int getCount() { return arrayList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override//实例一个View public Object instantiateItem(ViewGroup container, int position) { View v = arrayList.get(position); container.addView(v); return v; } @Override//销毁一个View public void destroyItem(ViewGroup container, int position, Object object) { View v = arrayList.get(position); container.removeView(v); } }
6、ViewPager和适配器关联起来,并把数据源设置进去
MyViewPagerAdapter2 adapter = new MyViewPagerAdapter2(this); adapter.setData(arrayList); mViewPager.setAdapter(adapter);
(滑动循环)
1、在上述的Activity类的onCreate()方法中添加
int n = Integer.MAX_VALUE / 2 % arrayList.size();int itemPosition = Integer.MAX_VALUE / 2 -n;mViewPager.setCurrentItem(itemPosition);
2把适配器类换成下列这种
//滑动循环 public class MyViewPagerAdapter1 extends PagerAdapter{ private ArrayList<View> arrayList = new ArrayList<View>(); private LayoutInflater layoutInflater; public MyViewPagerAdapter1(Context context){ layoutInflater = LayoutInflater.from(context); } public void setData(ArrayList<View> arrayList){ this.arrayList = arrayList; notifyDataSetChanged(); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override//实例一个View public Object instantiateItem(ViewGroup container, int position) { position = position % arrayList.size(); View v = arrayList.get(position); if (v.getParent() != null) { container.removeView(v); } container.addView(v); return v; } @Override//销毁一个View public void destroyItem(ViewGroup container, int position, Object object) { } }
ViewPager组件的监听事件
//监听页面滚动组件 mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override//当前页面 public void onPageSelected(int arg0) { } @Override//页面正在滚动 public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override//页面改变 public void onPageScrollStateChanged(int arg0) { } });
(自动循环滑动)
1、先按照上述写一个可以循环滑动的ViewPager
2、创建一个Handler消息机制来发送、处理消息
private static final int TITME = 2000; /** 循环时间 */private static final int MSG_NEXT_IMAGE = 1;/** 下一张图片 */private static final int MSG_PAGE_CHANGED = 2;/** 设置当前页号 */private Handler mPagerHandler = new Handler() { boolean flag = true; int currentPagerNo = 0; // 表示页号 public void handleMessage(android.os.Message msg) { // 检查消息队列并移除未发送的消息,这主要是避免在复杂环境下消息出现重复等问题。// if (mPagerHandler.hasMessages(MSG_NEXT_IMAGE) && !flag) {// mPagerHandler.removeMessages(MSG_NEXT_IMAGE);// flag = false;// } switch (msg.what) { case MSG_NEXT_IMAGE: currentPagerNo++; mViewPager.setCurrentItem(currentPagerNo); mPagerHandler.sendEmptyMessageDelayed(MSG_NEXT_IMAGE, TITME); break; case MSG_PAGE_CHANGED: // 记录当前的页号,避免播放的时候页面显示不正确。 currentPagerNo = msg.arg1; break; } } };
3、在onCreate()方法中发送消息
mPagerHandler.sendEmptyMessageDelayed(MSG_NEXT_IMAGE, TITME);
4、监听ViewPager
mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int postion) { mPagerHandler.sendMessage(Message.obtain(mPagerHandler,MSG_PAGE_CHANGED, postion, 0)); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } });
1 0
- Viewpager
- ViewPager
- ViewPager
- ViewPager
- ViewPager
- ViewPager
- viewpager
- ViewPager
- ViewPager
- ViewPager
- Viewpager
- viewpager
- ViewPager
- ViewPager
- ViewPager
- viewpager
- ViewPager
- ViewPager
- hiho 挑战赛16 B 王胖浩与环
- 阿里云ubuntu14.04 64位 java web环境的搭建
- ajax对象使用的简单实例
- 仿函数
- 在中国爱国企业家联盟我们应微笑应对生活
- ViewPager
- 排列序号
- C++日志类libglog使用
- 二维几何常用模板
- Floyd求最小环 hdu1599 find the mincost route
- Android静态注册广播receiver检测WIFI连接状况变化
- java基础关于线程
- 组成最大多位数
- 命令上的命令