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

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

作者: 点映文艺 | 来源:发表于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