使用viewpager实现广告条轮询的效果
先上效果图:
viewpager是google在v4-support包中提供的,使用时与listview类似,度需要提供一个adapter,
只不过viewpager提供的是PagerAdapter
查看文档,当我们要实现一个pageradapter的时候,至少要实现下面4个方法
例如:
class MyAdvertAdapter extends PagerAdapter{ /** * 返回条目的数量 * @return */ @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } /** * 创建一页的数据 * * @param container * @param position * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { position = position % picArray.length; ImageView imageView = new ImageView(AdvertScrollActivity.this); imageView.setImageResource(picArray[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); container.addView(imageView,params); return imageView; } /** * 销毁某一页的数据 * @param container * @param position * @param object */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((ImageView)object); object = null; } }
当pagerAdapter实现好后,就可以调用viewpager.setAdapter(pagerAdapter),此时就可以实现当手指滑动显示图片的效果
接下来就是添加图片描述的信息,还有用一些小点描述当前显示的是第几张图片
ViewPager有一个onPageChangeListener事件,当图片改变的时候会回调里面的一些方法
vp_advert.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } /** * 显示某张图片的时候回调改方法 * @param position */ @Override public void onPageSelected(int position) { position = position % picArray.length; Log.i(TAG,"onPageSelected...("+position+")"); /** * 设置图片的描述信息 */ tv_desc.setText(picDescArray[position]); /** * 设置小点的显示 */ ll_point_container.getChildAt(lastPosition).setEnabled(false); ll_point_container.getChildAt(position).setEnabled(true); lastPosition = position; } @Override public void onPageScrollStateChanged(int state) { } });
最后就是如何让图片自动轮询
可以使用线程,在线程里sleep,也可是使用timer定时器。
但是在这边我们使用的是handler的延迟发送消息
Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { vp_advert.setCurrentItem(vp_advert.getCurrentItem() + 1); if (isRunning) { handler.sendEmptyMessageDelayed(0x123,LOOP_TIME); } } };
大致功能就算完成了