android viewPager网络加载图片无限自动轮播

欢迎大家吐槽偷笑偷笑偷笑,有什么问题或bug,我们一起探讨。。。。


先看效果,还有demo自己可以看。。



activity中代码:

public class MainActivity extends Activity {

	private ViewPager mViewPager;
	// 记录当前的页数
	private int mCount = 0;
	// 开始
	public static final int START = -1;
	// 停止
	public static final int STOP = -2;
	// 更新
	public static final int UPDATE = -3;
	// 接受传过来的当前页面数
	public static final int RECORD = -4;
	private List<ImageView> mList;
	private MyPagerAdapter mAdapter;
	private List<String> urlList;
	private ImageView dot1, dot2, dot3, dot0;
	private ImageView[] dots = new ImageView[4];
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {

			switch (msg.what) {
			case START:
				handler.sendEmptyMessageDelayed(UPDATE, 3000);
				break;
			case STOP:
				handler.removeMessages(UPDATE);
				break;
			case UPDATE:
				mCount++;
				mViewPager.setCurrentItem(mCount);
				break;
			case RECORD:
				mCount = msg.arg1;
				break;

			default:
				break;
			}

		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		init();
		setListener();
		mAdapter = new MyPagerAdapter(mList);
		mViewPager.setAdapter(mAdapter);
		int i = Integer.MAX_VALUE / 2 % mList.size();
		// 默认在中间,让用户看不到边界
		mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - i);
		handler.sendEmptyMessage(START);
	}

	private void init() {
		// TODO Auto-generated method stub
		urlList = new ArrayList<String>();
		mList = new ArrayList<ImageView>();
		urlList.add("http://tupian.enterdesk.com/2015/saraxuss/04/17/gou/1/3.jpg");
		urlList.add("http://s2.nuomi.bdimg.com/upload/deal/2014/1/V_L/623682-1391756281052.jpg");
		urlList.add("http://media.chunyuyisheng.com/media/images/2013/05/15/9173ce6d26d9.jpg");
		urlList.add("http://img1.imgtn.bdimg.com/it/u=1856251628,4049763171&fm=21&gp=0.jpg");
		DisplayImageOptions options = new DisplayImageOptions.Builder()
				.cacheInMemory(true).displayer(new RoundedBitmapDisplayer(50))
				.displayer(new FadeInBitmapDisplayer(100)).cacheOnDisk(true)
				.bitmapConfig(Bitmap.Config.RGB_565).build();

		ImageView imageView;
		for (int i = 0; i < 4; i++) {
			imageView = new ImageView(MainActivity.this);
			imageView.setScaleType(ScaleType.FIT_XY);
			// 使用的ImageLoader网络加载图片,需先在Application和清单文件中配置在使用
			ImageLoader.getInstance().displayImage(urlList.get(i), imageView,
					options);
			mList.add(imageView);
			imageView.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					System.out.println("==========m==" + mCount % mList.size());
					// 这里写点击图片的操作 mCount % mList.size()这个点击的第几个图片
				}
			});
		}
	}

	private void initView() {
		// TODO Auto-generated method stub
		mViewPager = (ViewPager) findViewById(R.id.viewPager);
		dot0 = (ImageView) findViewById(R.id.dot1);
		dot1 = (ImageView) findViewById(R.id.dot2);
		dot2 = (ImageView) findViewById(R.id.dot3);
		dot3 = (ImageView) findViewById(R.id.dot4);
		dots[0] = dot0;
		dots[1] = dot1;
		dots[2] = dot2;
		dots[3] = dot3;
		dot0.setSelected(true);
	}

	private void setListener() {
		// TODO Auto-generated method stub
		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				handler.sendMessage(Message.obtain(handler, RECORD, arg0, 0));
				// 下面是控制点的变化
				int j = arg0 % mList.size();
				for (int i = 0; i < dots.length; i++) {
					dots[i].setSelected(false);
				}
				dots[j].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
				switch (arg0) {
				// 当滑动时让当前轮播停止
				case ViewPager.SCROLL_STATE_DRAGGING:
					handler.sendEmptyMessage(STOP);
					break;
				// 滑动停止时继续轮播
				case ViewPager.SCROLL_STATE_IDLE:
					handler.sendEmptyMessage(START);
					break;
				}
			}
		});

	}
}


自定义pagerAdapter(大同小异)
public class MyPagerAdapter extends PagerAdapter {

	private List<ImageView> imageViews;

	public MyPagerAdapter(List<ImageView> list) {
		super();
		imageViews = list;
		// TODO Auto-generated constructor stub
	}

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

	@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) {
	}

	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		// TODO Auto-generated method stub
		// 因为实际只有几个页面但是我们要无限循环,所以取模计算出当前的是第几个页面
		int i = position % imageViews.size();
		// 预防负值
		position = Math.abs(i);
		ImageView imageView = imageViews.get(position);
		ViewParent parent = imageView.getParent();
		// remove掉View之前已经加到一个父控件中,否则报异常
		if (parent != null) {
			ViewGroup group = (ViewGroup) parent;
			group.removeView(imageView);
		}
		container.addView(imageView);
		return imageView;
	}
}


布局文件:(圆点的就不贴了,可看demo)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

   <android.support.v4.view.ViewPager
       android:id="@+id/viewPager"
       android:layout_width="wrap_content"
       android:layout_height="200dp"
       >
   </android.support.v4.view.ViewPager>
<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_horizontal"
    android:layout_alignBottom="@id/viewPager"
    android:layout_marginBottom="10dp"
    >
    <ImageView 
        android:id="@+id/dot1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        
        android:src="@drawable/dot_layout"/>
    <ImageView 
        android:id="@+id/dot2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_margin="5dp"
        android:src="@drawable/dot_layout"/>
    <ImageView 
        android:id="@+id/dot3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_margin="5dp"
        android:src="@drawable/dot_layout"/>
    <ImageView 
        android:id="@+id/dot4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_margin="5dp"
        android:src="@drawable/dot_layout"/>
    
    
</LinearLayout>
</RelativeLayout>

点击获取:源码demo





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
AndroidViewPager是一种常用的布局容器,用于在屏幕上滑动显示多个页面。在实现轮播效果时,可以通过以下步骤来实现: 1. 首先,在XML布局文件中添加ViewPager组件。可以设置该组件的宽度和高度,以及其他属性,如指示器dots等。 2. 创建一个适配器类(如PagerAdapter),用于管理ViewPager中的页面。适配器需要重写一些方法,如获取页面数量、创建页面和销毁页面等。 3. 在创建页面的方法中,可以使用LayoutInflater.inflate()方法来加载布局文件,然后将其添加到ViewPager中。可以根据需求自定义每个页面的布局。 4. 在Activity或Fragment中,通过findViewById()方法获取ViewPager组件的实例,并设置适配器。例如: ViewPager viewPager = findViewById(R.id.viewPager); viewPager.setAdapter(adapter); 5. 如果需要实现轮播效果,可以通过设置ViewPager的setCurrentItem()方法来切换页面。可以使用Handler类来实现定时切换页面的效果。例如: Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { int currentItem = viewPager.getCurrentItem(); if (currentItem < adapter.getCount() - 1) { currentItem++; } else { currentItem = 0; } viewPager.setCurrentItem(currentItem); handler.postDelayed(this, 3000); // 间隔3秒切换页面 } }; handler.postDelayed(runnable, 3000); 以上就是使用AndroidViewPager实现轮播效果的简要步骤。通过设置适配器和定时切换页面,可以让多个页面在屏幕上自动滑动显示,从而实现轮播效果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值