在项目开发中,我们经常会在软件的主页使用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);
}
}
}