我在我的ActionBar
中有一個MenuItem
這是一個「重新加載」圖標。我的Activity
有WebView
,我希望這個圖標在WebView
開始加載網頁並在完成時停止時開始動畫。這包括點擊加載的網站中的鏈接。我至今,作品第一次我帶了一個網頁,但是如果我離開Activity
和加載另一個網頁時,「重裝」圖標似乎加倍,或者我會得到NullReference
拋出的異常的refreshItem.setActionView(ivRefresh);
頁面加載時啓動動畫,加載頁面時停止
這裏是我的代碼:
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);
}
}
註釋掉的代碼是不同的方法,我試圖得到它的工作。
UPDATE:
調試這更後,我把一個斷點在StartAnimation
功能,有時它的命中最多連續等次的7倍事實並非如此。這沒有任何意義,因爲對我而言,這應該是有效的。令人費解......
SOLUTION(差不多):
更新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);
}
}
你有工作嗎?怎麼樣? – Ronnie
我向OP添加了我的解決方案。檢查它是否爲空或沒有解決我的問題。 –
您是否嘗試將動畫製作爲您班級的成員? – Ronnie