Android ViewPager使用方法

原创 2013年12月05日 11:30:43

       ViewPager是一个能平滑分页显示的控件,对于某些应用选择该控件是极其方便的,如显示照片、广告、产品信息等。如果需要轮播,只需要加一个定时器即可实现。下面首先介绍使用ViewPager的一般方式。

       我们需要在xml里面定义好ViewPager组件,

<android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"/>

     定义好后,我们可以在Activity中找到这个ViewPager,对其分配一个适配器。

mViewPager = (ViewPager) findViewById(R.id.viewpager);
mViewPagerAdapter = new MyViewPagerAdapter(this, mJsonArray);
mViewPager.setAdapter(mViewPagerAdapter);

     在这里重点是写一个继承于PagerAdapter的子类,如public class MyViewPagerAdapter extends PagerAdapter,new MyViewPagerAdapter(this, mJsonArray)中的第二个参数是装载到ViewPager中的数据源,是一个JSONArray,这个数据源可以从服务器上获取,也可以从Android设备本地获取。在这个类里,需要覆写几个重要的方法:

  1.     public Object instantiateItem(ViewGroup container, int position)
  2.     public int getCount()
  3.     public void destroyItem(View container, int position, Object object)
  4.     public boolean isViewFromObject(View view, Object object)
第一个方法是初始化方法,在这里添加viewpager中的不同布局的view,如下面的itemView = new LcCpItemView(mContext, dataObj)、staItemView = new SingleStaItemView(mContext)、adItemView = new GgItemView(mContext);这几个对象类都是LinearLayout的子类,在这些类里,加载自己想要的布局文件以及数据源。
@Override
	public Object instantiateItem(ViewGroup container, int position) { // 这个方法用来实例化页卡
		try {
//			Log.e(TAG, "position=" + position);
			dataObj = (JSONObject) mArray.get(position);
			String type = dataObj.getString("type");
			if ("CP".equals(type)) {

				LcCpItemView itemView;
				itemView = new LcCpItemView(mContext, dataObj);

				((ViewPager) container).addView(itemView);
				return itemView;

			} else if ("YG".equals(type)) {
				SingleStaItemView staItemView;
//				Log.e(TAG, "instantiate:" + position);
				staItemView = new SingleStaItemView(mContext);
				ImageView imageView = (ImageView) staItemView
						.findViewById(R.id.sb);

				imageView
						.setOnLongClickListener(new View.OnLongClickListener() {
							@Override
							public boolean onLongClick(View v) {
								login(mContext);
								return true;
							}
						});

				staItemView.setData(dataObj);

				if (staItemView.bitmap != null
						&& !staItemView.bitmap.isRecycled()) {

					staItemView.bitmap.isRecycled();
				}
				System.gc();

				((ViewPager) container).addView(staItemView);

				return staItemView;
			} else if ("GG".equals(type)) {
				GgItemView adItemView;
				adItemView = new GgItemView(mContext);
				adItemView.setData(dataObj, position);

				if (adItemView.bitmap != null
						&& !adItemView.bitmap.isRecycled()) {

					adItemView.bitmap.isRecycled();
				}
				System.gc();

				((ViewPager) container).addView(adItemView);

				return adItemView;
			}

		} catch (JSONException e) {
			e.printStackTrace();
		}

		return null;

	}
第二个方法是获取总共页数的方法
@Override
	public int getCount() {

		return mArray.length();// 返回页卡的数量
	}

第三个方法是销毁掉页面的方法,只有添加了这个方法,对某些页面进行销毁后,才不会出现内存溢出错误
	@Override
	public void destroyItem(View container, int position, Object object) {

		((ViewGroup) container).removeView((View) object);

	}

ViewPager还有其监听事件,如触摸事件:
mViewPager.setOnTouchListener(new View.OnTouchListener() {

				@Override
				public boolean onTouch(View v, MotionEvent event) {
					switch (event.getAction()) {
					case MotionEvent.ACTION_DOWN:
					case MotionEvent.ACTION_MOVE:
						isContinue = false;
						break;
					case MotionEvent.ACTION_UP:
						isContinue = true;
						break;
					default:
						isContinue = true;
						break;
					}
					return false;
				}
			});

页面变化监听事件:
OnPageChangeListener pageListener = new OnPageChangeListener() {

		@Override
		public void onPageSelected(int arg0) {
			// Log.e(TAG, "onPageSelected():arg0="+arg0);
			isContinue = false;

			random = arg0 - 1;
			// Log.e(TAG, "换页后random="+random);
			isContinue = true;

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {

		}

		@Override
		public void onPageScrollStateChanged(int arg0) {

		}
	};

mViewPager.setOnPageChangeListener(pageListener);

完成上述几个步骤基本就能够实现分页效果了,下图是为"GG".equals(type)的情况,这个布局里就只有一个ImageView。
      









 


Android ViewPager的简单使用方法

ViewPager的基本使用方法

android ViewPager嵌套的使用方法

本文用代码描述了ViewPager内部嵌套ViwePager的使用方法,经过测试没有问题,如在使用过程中有问题可及时沟通 首先在自己创建的项目中任选一个包来创建一个类继承ViewPa...

Android ViewPager的使用方法

以前在写一个小app —— 个人博客客户端——My CSDN 的实现 的时候,就使用过ViewPager来呈现界面切换的效果,可是隔的时间长了,今天要使用的时候却忘了使用方法,琢磨了一下才又明白了 ...

Android ViewPager基本使用方法

这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如...
  • wsgqp
  • wsgqp
  • 2016年08月12日 15:55
  • 308

Android ViewPager使用方法小结

android-support-v4.jar 是谷歌提供给我们的一个兼容低版本安卓设备的软件包,里面包囊了只有在 Android 3.0 以上可用的API。而 ViewPager 就是其中之一。利用它...

Android ViewPager使用方法+ViewPager循环滑动

新手学习android的知识总结ViewPager是手机上最常见的效果,它能给用户带来很好的体验ViewPager的使用:①基于xml文件的ViewPager:(1)主xml文件中的代码如下(这里命名...

Android ViewPager切换之PageTransformer接口中transformPage方法position参数使用详解

大家都知道在Android App项目开发、TV项目开发中,会经常性的使用到ViewPager,可以说是用的非常多,也十分重要的一个控件,然而在开发使用ViewPager的时候,我们可以给ViewPa...

android ViewPager的使用

  • 2014年07月15日 10:05
  • 1.19MB
  • 下载

Android ViewPager和SlidingPaneLayout的滑动事件冲突处理方法

最近在做一个项目需要用到ViewPager加载广告图,布局中需要侧滑,用了android V4包里的SlidingPaneLayout控件(该控件在旧的v4包里面没有,需要更新v4包),项目中使用的时...
  • L_wLe
  • L_wLe
  • 2017年03月23日 19:33
  • 240

Android ViewPager和SlidingPaneLayout的滑动事件冲突处理方法

转载自:http://www.cnblogs.com/apaojun/p/4288483.html 最近在做一个项目需要用到ViewPager加载广告图,布局中需要侧滑,用了android ...
  • fwt336
  • fwt336
  • 2015年06月04日 15:01
  • 876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ViewPager使用方法
举报原因:
原因补充:

(最多只允许输入30个字)