您的位置:首页 > 移动开发 > Android开发

android ViewPager 轮播图的实现

2016-04-03 00:00 519 查看
摘要: 轮播图功能在app里面还是常见的,下面简单写一个demo。

原理很简单,发送一个延迟消息就可以了,具体说明看代码:

universal-imageloader 进行的图片加载;

MainActivity:

package com.hong.autoshowpager;

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
private MyViewPager adapter;

private ArrayList<String> showImages;//网络数据(图片的url)
private DisplayImageOptions options;//加载图片的option设置(universal-imageloader框架)

/**
* 自动轮播效果;
*/
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
int currentItem = viewPager.getCurrentItem();//获取当前pager的position
viewPager.setCurrentItem(currentItem + 1);//收到消息后,播放下一张
removeCallbacksAndMessages(null);//移除消息回调
sendEmptyMessageDelayed(1, 3000);//再次发送播放下一张的消息;
break;
}
}
};
private MyOnPageChangeListener myOnPageChangeListenr;
int currentPosition;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
options = new DisplayImageOptions.Builder()//option的设置
.showImageOnLoading(R.drawable.ic_launcher)
.cacheOnDisk(true)
.cacheInMemory(true)
.build();

viewPager = (ViewPager) findViewById(R.id.viewpager);

showImages = ContentUtils.getShowImages();//从数据类里面获得播放的图片数据
currentPosition = showImages.size() * 2000;//设置初始化时显示第 currentPosition 页;可以设置很大显示position值
adapter = new MyViewPager();

viewPager.setCurrentItem(currentPosition);//设置到 currentPosition 的页面
myOnPageChangeListenr = new MyOnPageChangeListener();

viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(myOnPageChangeListenr);//给viewPager设置监听事件
handler.sendEmptyMessageDelayed(1, 3000);//发送延迟消息,每3秒播放下一张

}

/**
* 适配器
*/
private class MyViewPager extends PagerAdapter {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
View pager1 = View.inflate(getApplicationContext(), R.layout.item_pager, null);
ImageView imageView = (ImageView) pager1.findViewById(R.id.item_imageview);

//对Position进行取模,因为 getCount() 方法里面返回的数量是很大的;否则会 OutOfIndexException 错误
ImageLoader.getInstance().displayImage(showImages.get(position % showImages.size()), imageView, options);
container.addView(pager1);
return pager1;
}

@Override
public int getCount() {
return showImages.size() * 5000;//当然也可以写成:Integer.MAX_VALUE; 随你心情;

}

@Override
public boolean isViewFromObject(View view, Object object) {
return object == view;
}
}

/**
* 实现监听的类
* 在拖拽状态时不进行轮播
*/
private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {//在 拖拽 的时候移除消息回调
handler.removeCallbacksAndMessages(null);
} else if (state == ViewPager.SCROLL_STATE_SETTLING) {//在 松手复位 的时候重新发送消息
handler.sendEmptyMessageDelayed(1, 3000);
} else if (state == ViewPager.SCROLL_STATE_IDLE) {//在 空闲 时候发送消息
handler.sendEmptyMessageDelayed(1, 3000);
}
}
}
}


ContentUtils:

private static String[] showImages = {
"http://wimg.spriteapp.cn/ugc/2016/04/01/56fdfa2133add_1.jpg",
"http://wimg.spriteapp.cn/ugc/2015/12/20/5675e6ea806e0_a_1.jpg",
"http://wimg.spriteapp.cn/ugc/2016/04/01/56fdfd7d9483f_a_1.jpg"
};

public static ArrayList<String> getShowImages() {
ArrayList<String> images = new ArrayList<>();
for (int i = 0; i < showImages.length; i++) {
images.add(showImages[i]);
}
return images;
}

不要忘了 添加权限。

demo地址: http://download.csdn.net/download/qq_33363534/9480283
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 轮播图Demo