나는 이 내 ActionBar
에 있는데,이 애니메이션은 "다시로드"아이콘입니다. 내 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 회까지 공격합니다. 나에게 이것이 작동해야하기 때문에 이것은 말이되지 않습니다. 당혹 ...
솔루션 (SORT의) :이에 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에 내 솔루션을 추가했습니다. null인지 확인하거나 문제가 해결되지 않았는지 확인하십시오. –
애니메이션을 수업의 구성원으로 사용해 보셨습니까? – Ronnie