gpt4 book ai didi

android - 使用处理程序自动滚动 WebView

转载 作者:搜寻专家 更新时间:2023-11-01 09:01:42 25 4
gpt4 key购买 nike

我想在每一定毫秒数给定一定数量的像素的情况下,从上到下自动滚动加载到 WebView 中的页面。我看过这个帖子:+Android Webview - how to autoscroll a page?但是在很多其他线程上,他们说为此使用计时器是个坏主意,所以我使用了 this tutorial对于处理程序:创建我的处理程序。现在我的代码看起来像这样:

private Handler mHandler=new Handler();

private Runnable mScrollDown = new Runnable()
{
public void run()
{
WebView webview = (WebView)findViewById(R.id.web_url);
webview.scrollBy(0, scrollSpeed);
mHandler.postAtTime(this, 200);
}
};

如果我只调用它一次,(删除再次调用它的最后一行)它会工作,它会下降然后停止。但是,如果我尝试使用此代码使其逐渐向下滚动,则 View 似乎不会失效(或者它正在失效但不会重绘)。通过调试器,我可以看到 WebView 的 mScrollY 属性增加了,但 View 没有移动。

我的猜测是系统正在等待对 View 的所有更改以重绘它。有什么方法可以在每次迭代时更新 View ,或者有更好的方法吗?

注意:我没有将页尾检查和停止按钮放在那里,因为它们与问题无关。

最佳答案

我找到了答案;

private Runnable mScrollDown = new Runnable()
{
public void run()
{
WebView webview = (WebView)findViewById(R.id.web_url);
webview.scrollBy(0, scrollSpeed);
mHandler.postDelayed(this, 200);
}
};

使用 postDelayed 而不是 postAtTime 修复了它。虽然 postAtTime(runnable,0) 用于启动循环,但 postAtTime 期望时间作为第二个参数,因为我只传递了 200 毫秒,它虽然晚了但立即进行了第二次(和下一次)迭代,没有时间进行要绘制的元素。postDelayed 期望在再次执行之前等待数毫秒,这使系统有时间重绘窗口和执行其他事件。

关于android - 使用处理程序自动滚动 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com