图片轮播之无限轮播

来源:互联网 发布:js将集合转换为数组 编辑:程序博客网 时间:2024/05/17 01:54
用ViewPager来实现轮播,会考虑到无限轮播和左右循环,需要做到以下5步:


//1.把图片的总数改为整数的最大值,做为虚假的图片数量
//2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界
//3.设置虚假图片位置的起点为整数最大值的中间
//4.算出真正图片位置与起点的偏差值
//5.整数最大值的中间-真正图片位置与起点的偏差值


/*================================= 适配器的设置 =================================*/class PictureAdapter extends PagerAdapter {@Overridepublic int getCount() {// TODOif (mData != null) {//1.把图片的总数改为整数的最大值,做为虚假的图片数量return Integer.MAX_VALUE;}return 0;}@Overridepublic boolean isViewFromObject(View view, Object object) {// TODOreturn view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {// TODO//2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界//position(真正的图片位置) = position(虚假的图片位置) % mData.size()(图片数量);position = position % mData.size();ImageView iv = new ImageView(UIUtils.getContext());iv.setImageResource(R.drawable.ic_default);String url = URLS.IMAGEBASEURL + mData.get(position);BitmapHelper.display(iv, url);container.addView(iv);return iv;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// TODOcontainer.removeView((View) object);}}/*================================= viewPager的触摸事件设置 =================================*/// 设置viewpager的滑动事件mViewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {// TODO//2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界//position(真正的图片位置) = position(虚假的图片位置) % mData.size()(图片数量);position = position % mData.size();for (int i = 0; i < mData.size(); i++) {View indicatorView = mContainer.getChildAt(i);indicatorView.setBackgroundResource(R.drawable.indicator_normal);if (i == position) {indicatorView.setBackgroundResource(R.drawable.indicator_selected);}}}@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO}@Overridepublic void onPageScrollStateChanged(int state) {// TODO}});//4.算出真正图片位置与起点的偏差值int diff = Integer.MAX_VALUE / 2 % mData.size();//3.设置虚假图片位置的起点为整数最大值的中间,这样可以使得轮播一开始从可以划到左边的效果,但是可能出现获取到的真正图片位置不是从0开始的现象,所以要算出真正图片位置与起点的偏差值mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - diff);




0 0
原创粉丝点击