ViewPager的自动无线轮播

在项目开发中,我们经常会在软件的主页使用ViewPager来进行图片的无限次的自动轮换展示,但是常规的viewPager很显然不能满足我们的这个要求,那么我们就需要对ViewPager进行一些小小的改动,来达到我们实际想要的效果。下面是写的一个小Demo,大家可以看一下,原理其实非常简单。这个demo里实际上也不是真正的无限轮播,因为只是讲viewPager的最大页数修改为了整数的最大值,所以,理论上来说,还是有尽头的,不过在实际使用中,用户基本不会发现这种情况。所以,大家可以尝试一下。

代码如下:

首先是布局文件:


   
   

    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    


   
   

然后制作小圆点,用shape制作:

红色圆点:


   
   
    
    
    
    
    
    

   
   

灰色圆点:


   
   
    
    
    
    
    
    

   
   
小圆点选择器:


   
   
    
    
    
    
    
    

   
   


//另外小圆点需要的颜色,colors文件夹下:
    
   
   
    
    #ff0000
   
   
    
   
   
    
    #999999
   
   
具体实现代码:

public class MainActivity extends Activity {

	private ViewPager vp;
	private LinearLayout ll;
	private ProgressBar par;
	private WebView webview;
	private ArrayList
    
    
     
      imglist;
	private ArrayList
     
     
      
       yuanList;
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			vp.setCurrentItem(vp.getCurrentItem() + 1);
			// handler.sendEmptyMessageAtTime(0, 2000);
			handler.sendEmptyMessageDelayed(0, 2000);
		};
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		vp = (ViewPager) findViewById(R.id.vp);
		ll = (LinearLayout) findViewById(R.id.ll);
		// par = (ProgressBar) findViewById(R.id.pbar);
		// webview = (WebView) findViewById(R.id.web);

		// 创建轮播
		initLunBo();

		// 设置适配器
		vp.setAdapter(new Myadater());
		handler.sendEmptyMessageDelayed(0, 2000);
		// handler.sendEmptyMessageAtTime(0, 2000);
		// 设置滑动件听
		vp.setOnPageChangeListener(new OnPageChangeListener() {

			@Override
			public void onPageSelected(int arg0) {
				int newposition = arg0 % yuanList.size();
				for (int i = 0; i < yuanList.size(); i++) {
					yuanList.get(i).setSelected(false);
				}
				yuanList.get(newposition).setSelected(true);

			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub

			}
		});
		
		// viewpager的触摸事件,点击图片停止轮播,松开继续轮播
		vp.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					//点击触摸图片后,清空handler消息
					handler.removeCallbacksAndMessages(null);
					break;
				case MotionEvent.ACTION_UP:
					//松开手之后,继续发消息开始轮播
					handler.sendEmptyMessageDelayed(0, 2000);
					break;

				default:
					break;
				}
				return false;
			}
		});
	}

	class Myadater extends PagerAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return Integer.MAX_VALUE;
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			int newposition = position % imglist.size();
			ImageView imageView = imglist.get(newposition);
			container.addView(imageView);
			return imageView;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			int newposition = position % imglist.size();
			container.removeView(imglist.get(newposition));
			// super.destroyItem(container, position, object);
		}

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

	}

	private void initLunBo() {
		imglist = new ArrayList
      
      
       
       ();
		yuanList = new ArrayList
       
       
        
        ();
		int[] picture=new int[]{R.drawable.a,R.drawable.aa,R.drawable.aaa,R.drawable.aaaa};

		for (int i = 0; i < picture.length; i++) {
			//创建出一个imageview对象,设置viewPager的每页图片
			ImageView imageView = new ImageView(MainActivity.this);
			imageView.setImageResource(picture[i]);
			//测量值
			imageView.layout(0, 0, 200, 200);
			//图片平铺的类型
			imageView.setScaleType(ScaleType.CENTER_CROP);
			//存放进图片集合
			imglist.add(imageView);
			//创建小圆点
			ImageView imageView2 = new ImageView(MainActivity.this);
			imageView2.setBackgroundResource(R.drawable.select);
			imageView2.setPadding(5, 5, 5, 5);
			//把小圆点放进摆放显示圆点的布局里
			ll.addView(imageView2);
			//存放进圆点集合
			yuanList.add(imageView2);
			
		}
		
	}

}
       
       
      
      
     
     
    
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值