Ответ 1
Это лучшее, что я мог бы сделать с помощью родной apis, кажется, что время не совсем правильно, потому что загрузка страницы и анимации асинхронна. EDIT: обновлено, это немного лучше. EDIT2: Это моя лучшая попытка до сих пор, и это позволяет пользователю понять, что страница загружается. Единственный способ получить полугладкую анимацию - позволить предварительной загрузке страницы, пока пользователь ее не видит.
package com.adeptdev.animwebview;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class HelloWebViewActivity extends Activity {
ProgressDialog mProgressDialog;
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.setVisibility(View.GONE);
mProgressDialog.setTitle("Loading");
mProgressDialog.show();
mProgressDialog.setMessage("Loading " + url);
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
mProgressDialog.dismiss();
animate(view);
view.setVisibility(View.VISIBLE);
super.onPageFinished(view, url);
}
}
private void animate(final WebView view) {
Animation anim = AnimationUtils.loadAnimation(getBaseContext(),
android.R.anim.slide_in_left);
view.startAnimation(anim);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
WebView view = (WebView) findViewById(R.id.webview);
if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) {
view.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mProgressDialog = new ProgressDialog(this);
WebView webView = (WebView) findViewById(R.id.webview);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com/");
webView.setWebViewClient(new HelloWebViewClient());
}
}