最新消息:文章中包含代码时,请遵守代码高亮规范!

Android开发 ViewPage轮播图统计每张图片的展示次数和时间【原创】

Android 李, 泰愚 136浏览 0评论

Android开发中,经常会用到轮播图作为展示,一般会用作展示广告或者其他活动,就比如淘宝,京东首页。那么当我们在展示的时候,有时候需要统计展示页的展示次数和时间,这样以便于区分用户对活动的感兴趣程度。自己用ViewPage实现了一个轮播图作为统计的一个小Demo。

首先是定义这几个变量,

private List<ImageView> imageList;
private int[] count;
private TimeBean[] timeBean;

其中TimeBean数组是写的一个计时的实体类的数组,下标对应每张图片一个记时器,count数组下标对应每张图片,用来计数。imageList则是装有ImageView 的集合,此处并没有什么其他作用,仅作为参考。

初始化如下,timeBean和count的长度以轮播图的数量为准。

count = new int[imageList.size()];
timeBean = new TimeBean[imageList.size()];
for(int i = 0; i < timeBean.length; i++) {
    timeBean[i] = new TimeBean();
}

其中TimeBean的实现如下,

public class TimeBean {
    private int time;
    private Timer timer = new Timer();
    private TimerTask task;

    public void startTime() {
        timer = new Timer();
        task = new TimerTask() {
            @Override
            public void run() {
                time++;
            }
        };
        timer.schedule(task, 1000, 1000);
    }

    public void pause() {
        if(timer != null) {
            timer.cancel();
            timer = null;
        }
         if (task != null) {
             task.cancel();
             task = null;
         }

    }

    public int getTime() {
        return time;
    }
}

int值的time为时间,秒为单位,利用Timer和TimerTask使得每隔1秒time加1,起到计时作用,在startTime()方法中,启动计时,pause()方法中将timer和task取消并置为null。

然后给ViewPager设置监听,

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                int newPosition = position % imageList.size();
                lastEnablePoint = newPosition;
                count[newPosition]++;
                for(int i = 0; i < timeBean.length; i++) {
                    if(i == newPosition) {
                        timeBean[i].startTime();
                    } else {
                        timeBean[i].pasue();
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

其中关于position的计算是为了实现轮播图的循环播放,在onPageSelected()方法中,每当图片切换时,对应的技术count加1,且启动该图片位置对应的记时器进行计时。到这里,差不多就完成的大致的功能,但是有个问题,就是页面跳转的时候,会有一个当前图片对应的记时器一直在计时,而当在此回到这个界面时,还要考虑恢复当前图片的记时器继续计时。那么在Activity中重写onPause方法和onRestart方法,如下,

@Override
protected void onPause() {
    super.onPause();
    for (int i = 0; i < timeBean.length; i++) {
        timeBean[i].pasue();
    }
}

@Override
protected void onRestart() {
    super.onRestart();
    if(viewPager != null && timeBean.length > 0) {
        timeBean[viewPager.getCurrentItem() % imageList.size()].startTime();
    }
}

在onPause中将所有记时器停止,在onRestart中利用ViewPager的getCurrentItem方法找到当前图片的位置,并启动对应的记时器继续计时。

 

最后,此实现中,因为对java中记时器的了解使得本人觉得用Timer和TimerTask比较合适,当然也可能会存在着更好的实现方法,待日后接触到再来改正。

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/22109.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者rick的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!