Я разработал приложение Webview. При загрузке WebView отображается экран-заставка в виде «Progressbar». Но я вижу заставку только 1 секунду, потому что заставка скрыта после успешной загрузки веб-просмотра. Загрузка очень быстрая, но я хочу увидеть заставку в течение 3 секунд. Как я могу реализовать это таким образом, чтобы заставка отображалась в течение минимум 3 секунд?
Основная деятельность:
public class MainActivity extends AppCompatActivity {
String ShowOrHideWebViewInitialUse = "show";
private WebView webview ;
private ImageView spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getDelegate().setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
setContentView(R.layout.activity_main);
webview =(WebView)findViewById(R.id.webView);
spinner = (ImageView)findViewById(R.id.logo_id3);
webview.setWebViewClient(new CustomWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
webview.loadUrl("xxxxxxxxxx");
}
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (webview.canGoBack()){
webview.goBack();
Toast.makeText( this, "Going back inside a WebView", Toast.LENGTH_SHORT).show();
}else {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Doppelt zurück um zu beenden", Toast.LENGTH_SHORT).show();
}
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
// Your Code
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
// This allows for a splash screen
// (and hide elements once the page loads)
private class CustomWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView webview, String url, Bitmap favicon) {
// only make it invisible the FIRST time the app is run
if (ShowOrHideWebViewInitialUse.equals("show")) {
webview.setVisibility(webview.INVISIBLE);
}
}
@Override
public void onPageFinished(WebView view, String url) {
ShowOrHideWebViewInitialUse = "hide";
spinner.setVisibility(View.GONE);
view.setVisibility(webview.VISIBLE);
super.onPageFinished(view, url);
}
}
}
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
// Hide the splash here
}
});
Вы должны скрыть всплеск, как только ссылка закончит загрузку URL-адреса.
В вашем случае вы можете отложить свой код следующим образом:
public void onPageFinished(WebView view, String url) {
Thread.sleep(2000);
ShowOrHideWebViewInitialUse = "hide";
spinner.setVisibility(View.GONE);
view.setVisibility(webview.VISIBLE);
super.onPageFinished(view, url);
}
Единицей для 2000 являются миллисекунды. Итак, это приостановит поток на 2 секунды, а затем продолжит
Или используйте класс обработчика следующим образом:
public void onPageFinished(WebView view, String url) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
ShowOrHideWebViewInitialUse = "hide";
spinner.setVisibility(View.GONE);
view.setVisibility(webview.VISIBLE);
super.onPageFinished(view, url);
}
}, 2000);
}
Вы можете использовать обработчик с postDelayed
Здесь код в postDelayed будет выполняться через 3 секунды после вызова onPageFinished
@Override
public void onPageFinished(WebView view, String url) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
ShowOrHideWebViewInitialUse = "hide";
spinner.setVisibility(View.GONE);
view.setVisibility(webview.VISIBLE);
super.onPageFinished(view, url);
}
}, 3000); // 3 seconds (3000 millisec)
}
Пожалуйста, добавьте пояснение к вашему ответу