0

スプラッシュスクリーンの表示を 3 秒間開始し、別のアクティビティを呼び出して Web ビューを開始するこのアプリケーションがあります。

コードスプラッシュスクリーン

package test.test;

import test.test.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;

public class SplashScreen extends Activity {

int timer = 0;

@Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_splash_screen);

      Thread splashThread = new Thread() {

      @Override
      public void run() {
            try {
               while (timer < 3000) {
                  sleep(100);
                  timer += 100;            
               }
            } catch (InterruptedException e) {
               // do nothing
            } finally {
               finish();
               Intent i = new Intent();
               i.setClassName("test.test","test.test.Mainmenu");
               startActivity(i);
            }
        }
      };
      splashThread.start();
   }
}

コード XML スプラッシュ

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:animateLayoutChanges="false"
    android:background="#57a11f" >

    <ImageView
        android:id="@+id/ImageView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:contentDescription="@string/image"
        android:src="@drawable/splash" />
</RelativeLayout>

コード ウェブビュー

package test.test;

import test.test.R;

import android.app.Activity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Mainmenu extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        setContentView(R.layout.activity_mainmenu);

        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setAppCacheMaxSize( 10 * 1024 * 1024 );
        webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath()+ "/cache" );
        webView.getSettings().setAllowFileAccess( true );
        webView.getSettings().setAppCacheEnabled( true );
        webView.setBackgroundColor(0x00000000);     
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled( true );
        webView.getSettings().setDomStorageEnabled( true );
        webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );

        if ( !isNetworkAvailable() ) { 
            webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
        }

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

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }   
}

コード ウェブビュー XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#57a11f"
    tools:context=".Mainmenu" >

    <WebView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:animateLayoutChanges="false" 
    />

</RelativeLayout>

問題: スプラッシュスクリーンが webview アクティビティを呼び出すと、しばらく空白の画面が表示され、ページをダウンロードしてレンダリングする時間になります。

私が望むこと: スプラッシュスクリーンと Web ビューを同時に開始する方法を知りたいのですが、バックグラウンドでページをロードしてレンダリングするのに 3 秒かかるように Web ビューを非表示にします。

追加:スプラッシュスクリーンを3秒間オンにしたいので、onPageFinishedを使用したソリューションを探していません。ところで、onPageFinishedを使用しても、Webページを画面に表示するのに必要なレンダリング時間が回避されません。

ありがとうございました!

4

1 に答える 1

3

同じレイアウト ファイルで ImageView と WebView を使用し、最初は WebView を View.Gone モードのままにします。

画面が終了したら、WebView View.Viasible と ImageView View.Gone を有効にします。

Pseudocode :

Webview=View.Gone;
ImageView=View.VISIBLE;
WebView.loadURL="<some url>";
SplasScreen timer for 3 seconds;
WebView=View.VISIBLE;
ImageVIew=View.GONE;

RelativeLayout または FrameLayout を使用する

于 2013-02-11T10:17:55.013 に答える