美文网首页
(技术)书接上篇—实现领导的需求:让网页自动滚动(从顶部滚动到底

(技术)书接上篇—实现领导的需求:让网页自动滚动(从顶部滚动到底

作者: 点映文艺 | 来源:发表于2019-09-26 09:10 被阅读0次
先说说整体的思路:
   思路梳理:
                页面加载完成后,通过 ScheduledExecutorService  执行定时操作,每隔一定时间让
                webView执行 WebView.scrollTo(0,height);
                同时获取网页的总高度, height叠加最后的高度 >= 网页的总高度 表示执行到最底部,进行切换网页操作
                注意:除了使用ScheduledExecutorService  还可以用谁来实现? 没错 Handler
                            联想另一个需求: 常见的共享汽车App,实时获取行驶的里程,距离、剩余电量.....没错,轮询.

上菜:

           /**
         *
         * 借助一个定时器 来完成需求
         * Timer 与 ScheduledExecutorService 实现定时器的效果
         * 通过定时器 来完成 每50毫秒钟执行滚动操作
         * 经过指定的时间后,执行所指定的任务
         * scheduleAtFixedRate(command, initialDelay, period, unit)
         * command 所要执行的任务
         * initialDelay 第一次启动时 延迟启动时间
         * period 每间隔多次时间来重新启动任务
         * unit 时间单位
         *
         */
       ScheduledExecutorService   scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();

       @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                
                // 页面总高度
                totalContentHeight = mWebView.mComputeVerticalScrollRange()-mWebView.getHeight();
                
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        currHeight += 2;  // 每次滚动2

                        if(scheduledExecutorService.isShutdown()){
                            //  开启定时任务
                            scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
                        }
                        scheduledExecutorService.scheduleAtFixedRate(new ViewScrollTask(), 1, 10, TimeUnit.MILLISECONDS);
                        mWebView.scrollTo(0,currHeight);
                    }
                });
            }

  // 用来完成当前高度已2的速度递增的任务
    private class ViewScrollTaskimplements Runnable {
        public void run() {
            // 增加指定的滚动值
            currHeight += 2;   // 每次滚动2
            // Handler来实现图片切换
            mHandler.obtainMessage().sendToTarget();
        }
    }


    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            Log.e("name","###  handleMessage   totalContentHeight: "+totalContentHeight+"   currHeight: "+currHeight);
            try {
                if(totalContentHeight < currHeight){
                    Log.e("name","当前高度等于总高度,切换网址");
                    scheduledExecutorService.shutdown();

                    currHeight = 0;
                    loadSite(position);
                    position++;
                    if (position >= list.size()) {
                        position = 0;
                    }

                }else{
                    Log.e("name","当前高度不等于总高度,继续向下滚动");
                    mWebView.scrollTo(0,currHeight);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        };
    };


  @Override
    protected void onStop() {
        super.onStop();
        // 停止定时任务
        scheduledExecutorService.shutdown();
    }

想不想联系到我?想?不想?到底想不想?想,想我就把我的QQ群:578060039 告诉你

打完收工

相关文章

网友评论

      本文标题:(技术)书接上篇—实现领导的需求:让网页自动滚动(从顶部滚动到底

      本文链接:https://www.haomeiwen.com/subject/wohbyctx.html