先说说整体的思路:
思路梳理:
页面加载完成后,通过 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 告诉你
打完收工
网友评论