效果展示:
概况:
1.使用handler进行线程之间的通讯
2 Handler的post方法作用:
将run方法里面的代码推到handler实例化的那个线程(主线程)中运行
3. postDelayed方法作用:
该继承post方法的特点,并且可以根据第二个参数进行延时执行。可以做广告轮播的效果。
实现思路:
1.初步构建ViewPager。
2.初始化数据。
3.适配数据,把适配到的数据设置到ViewPager中。
4.通过Handler中的postDelayed方法的延时效果进行页面轮播。
代码展示:
1.MainActivity的Code:
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private List<ImageView> imageList;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
//1在layout中创建viewpager
viewPager = (ViewPager) findViewById(R.id.viewpager);
//2初始化数据
loadData();
//3进行适配
MyViewpagerAdapter adapter = new MyViewpagerAdapter(imageList);
viewPager.setAdapter(adapter);
handler.postDelayed(new Runnable() {
@Override
public void run() {
//循环播放广告页面的步骤
//a获取当前页面
int currentItem = viewPager.getCurrentItem();
//b当切换到最后一张图时,就回到第一张
if(currentItem==imageList.size()-1){
currentItem = -1;
}
//c切换到指定position的页面
viewPager.setCurrentItem(currentItem+1);
//d关键:启动播放。
handler.postDelayed(this,1000);//轮播间隔时间
}
},5555);//启动轮播延时时间
}
private void loadData() {
imageList = new ArrayList<>();
ImageView imageview = new ImageView(this);
imageview.setScaleType(ImageView.ScaleType.FIT_XY);
imageview.setImageResource(R.mipmap.qq20150311160905);
imageList.add(imageview);
imageview = new ImageView(this);
imageview.setScaleType(ImageView.ScaleType.FIT_XY);
imageview.setImageResource(R.mipmap.qq20150311161032);
imageList.add(imageview);
imageview = new ImageView(this);
imageview.setScaleType(ImageView.ScaleType.FIT_XY);
imageview.setImageResource(R.mipmap.qq20150311160932);
imageList.add(imageview);
}
}
、、、
2.PagerAdapter适配的Code:
public class MyViewpagerAdapter extends PagerAdapter {
private List<ImageView> imageList;
public MyViewpagerAdapter(List<ImageView> imageList) {
this.imageList = imageList;
}
@Override
public int getCount() {
return imageList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageview = imageList.get(position);
container.addView(imageview);
return imageview;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageList.get(position));
}
}