使用Handler中postDelayed方法实现广告页面轮播效果

效果展示:
这里写图片描述
概况:
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));
    }
}
发布了33 篇原创文章 · 获赞 1 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览