gpt4 book ai didi

android - 在页面加载时启动动画,在页面加载时停止

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:42 28 4
gpt4 key购买 nike

我有一个 MenuItem在我的 ActionBar那是一个“重新加载”图标。我的Activity有一个 WebView我希望图标在 WebView 时开始动画开始加载网页并在完成时停止。这包括单击已加载站点中的链接时。到目前为止,我第一次打开网页时就可以工作,但是如果我离开 Activity并加载另一个网页,“重新加载”图标似乎加倍,否则我会得到 NullReferencerefreshItem.setActionView(ivRefresh); 上抛出异常

enter image description here

这是我的代码:

public class Browser extends SherlockFragmentActivity {

private MenuItem refreshItem;
private WebView mWebView;

@Override
public void onCreate(final Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.browser);

mWebView = (WebView)findViewById(R.id.webview);
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);

mWebView.loadUrl("http://www.google.com");

mWebView.setWebViewClient(new WebBrowserClient());

mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {

//if (!isFinishing() && progress == 100 && refreshItem != null && refreshItem.getActionView() != null)
//{
//refreshItem.getActionView().clearAnimation();
//refreshItem.setActionView(null);
//}
}
});
}

private class WebBrowserClient extends WebViewClient {

@Override
public void onLoadResource(WebView view, String url) {
//StartAnimation();
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
StartAnimation();
}

@Override
public void onPageFinished(WebView view, String url) {
if (refreshItem != null && refreshItem.getActionView() != null)
{
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
}
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}

private void StartAnimation() {
final LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null);

final Animation rotation = AnimationUtils.loadAnimation(this, R.anim.refresh);
ivRefresh.startAnimation(rotation);
refreshItem.setActionView(ivRefresh);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.menu, menu);

refreshItem = menu.findItem(R.id.refresh);

return super.onCreateOptionsMenu(menu);
}
}

注释掉的代码是我试图让它工作的不同方式。

更新:

经过更多调试后,我在 StartAnimation 中放置了一个断点功能,有时它会连续命中 7 次,而其他时候则不会。这没有意义,因为对我来说,这应该有效。令人费解...

解决方案(排序):

为此更新 StartAnimation() 函数,似乎解决了这个问题,但似乎更像是胶带解决方案:

private void StartAnimation() {
if (refreshItem != null && refreshItem.getActionView() == null)
{
final LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null);

final Animation rotation = AnimationUtils.loadAnimation(this, R.anim.refresh);
ivRefresh.startAnimation(rotation);
refreshItem.setActionView(ivRefresh);
}
}

最佳答案

要创建流畅的用户界面体验,您的“加载轮”动画可能应该在用户单击链接时开始 - 而不是在新页面开始加载时 - 并在新页面加载时结束。这使应用程序看起来对用户更敏感,并且是在 Dolphin Browser 中实现的行为。 , 例如。

要实现这一点,您需要在 WebView 中监听用户的链接点击。 SO 上的此答案中已经介绍了如何执行此操作:

Detect click on HTML button through javascript in Android WebView

您必须验证点击实际上是在指向新页面的链接上。你可以通过 WebView 的 HitTestResult 找到被点击的 HTML 元素。类(class)。 SO 上的这个答案为您提供了有关如何验证 HitTestResult 值的详细信息:

Get the click event from webpage in my android application

您从 onClick() 方法开始动画,从 WebViewClient 的 onPageFinished() 方法结束动画,如果新页面未加载,也会在 onReceivedError() 中结束。

关于android - 在页面加载时启动动画,在页面加载时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508123/

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