2019.7.4(实训第四天)
实验目标:本次实训,主要目标是完善第三天的轮播图,使轮播图可以自动轮播
实验步骤:
在包adapter下创建类home_vp,首先,在这个类下创建四个抽象方法,getCount(),isViewFromObject(),destroyItem(),instantiateItem()
由于本次项目我们使用ViewPager 视图翻页工具,需要为它配置一个适配器,用于装载轮播图片,其中,getCount()方法,应返回数据源的长度大小,但本次项目为了实现无限循环的效果,需返回一个最大值,如下:
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}
这个数值可是20亿或更高的数值,用户即使再怎么滑也不会滑到上亿次级别;
为避免出现空指针异常,在instantiateItem()方法下,添加如下代码:
public Object instantiateItem(View container, int position) {
View v=View.inflate(context, R.layout.page, null);
ImageView im=(ImageView) v.findViewById(R.id.im);
im.setImageResource(bannerImages[position%bannerImages.length]);
((ViewPager)container).addView(v);
return v;
}
改代码段接收视图容器container及位置两个参数,创建一个view对象v,接收上下文变量context和layout文件page,同时,在创建一个ImageViewe对象im,并通过查询id将page.xml文件传递给im,最后将v对象添加到container中,即轮播图容器。
其中
im.setImageResource(bannerImages[position%bannerImages.length]);
是为了取余item的总数量,这样索引位置就不会超过资源数据的数量,例如1%777=1,1%999=1。
最后,在类HomeFragment中,添加如下代码段:
private void autoScroll() {
// TODO Auto-generated method stub
mHander.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
vp.setCurrentItem(vp.getCurrentItem()+1, true);
mHander.postDelayed(this, 2000);
}
}, 5000);
}
其作用是设置轮播图自动播放,并由该类中的initData()的方法调用。