ViewPager循环

android.support.v4.view.ViewPager


ViewPager的使用跟AbsListView,AbsSpinner类似,需要用一个adapter填充数据,同时实现了onPagerChangeListener接口。


ViewPager需要的adapter继承自android.support.v4.view.PageAdapter,getCount返回adapter的长度,destroyItem滑出屏幕做remove操作,instantiateItem返回填充的视图对象。


要想让ViewPager显示循环的效果网上大多采用给adapter的getCount返回一个很长的数字,然后在返回视图对象的时候用长度getCount%真实数据集合的长度去求余数,求的的余数就是数据集合中拿出来要给instantiateitem返回的视图对象。

然后还可以根据这个余数去设置indicator(小圆点索引)的状态

如图:


代码:

初始化一个装这ImageView的List

List<ImageView> mViewPagerBannerList = new ArrayList<ImageView>();
for (int i = 0; i < 7; i++) {
        ImageView mImageView = (ImageView) LayoutInflater.from(
	getActivity()).inflate(	R.layout.fragment_market_featured_item0_imageview, null);
	mViewPagerBannerList.add(mImageView);
}

重写PageAdapter

class MyBannerPageAdapter extends PagerAdapter {
		List<ImageView> mImageViews;

		public MyBannerPageAdapter(List<ImageView> mImageViews) {
			this.mImageViews = mImageViews;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mImageViews.size() * 100;
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
			container
					.removeView(mImageViews.get(position % mImageViews.size()));
		}

		@Override
		public Object instantiateItem(ViewGroup container, final int position) {

			ImageView mView = mImageViews.get(position % mImageViews.size());
			ImageLoader loader = new ImageLoader(mQueue,//以下这一部分代码是Vollay动态给加载图片的
					VolleyBitmapCache.getCache());
			ImageListener imageListener = ImageLoader.getImageListener(mView,
					0, 0);
			loader.get(mBannerApps.get(position % mImageViews.size())
					.getBanner_link(), imageListener);

			try {
				container.addView(
						mImageViews.get(position % mImageViews.size()), 0);
			} catch (Exception e) {
				// handler something
			}
			return mImageViews.get(position % mImageViews.size());//根据余数返回要填充的ImageView
		}

		RequestQueue mQueue = Volley.newRequestQueue(getActivity());

	}


如果你的ViewPager位于ListView的头部,你就会发现对内容的单击事件没法监听了,如果监听了ViewPager的onClickListener之后,ViewPager的滑动会受到影响,我的做法是重写ViewPager,重写onTouch事件,在down和up事件上作文章,可见ViewPager嵌套使用的文章:http://blog.csdn.net/u013045971/article/details/41512055

大家有更好的方式的话,可以告诉我一下,谢谢。

 

posted @ 2014-12-03 14:25  顾明伟  阅读(174)  评论(0编辑  收藏  举报