2

大きな/複雑な svg 画像ファイルを imageView にロードしたいと思います。HTC Desire S と Lenovo a60 では、svg の読み込みに時間がかかります。それぞれ約5秒と10秒。

現在、imageView が完全に読み込まれるまで、アプリが約 5 秒間応答しなくなります

この単純なコードを使用して画像をロードします..

    svg = SVGParser.getSVGFromResource(getResources(), R.raw.gf);
    mImageView.setImageDrawable(svg.createPictureDrawable());

私は(webView)のようなものを見ていました

webView.setWebViewClient(new WebViewClientEx(MainActivity.this, DEBUG) {

 @Override
        public void onPageFinished(final WebView view, String url) {
 ...........
 .............}
 });

以前のプロジェクトで使用したもの...

最後に私の質問:

1.) アプリをレスポンシブに見せるための最善の方法は何ですか?

asynctask を使おうと思ったのですが使い方がわかりません... ここに当てはまりますか?

2.) イメージが完全にロードされた後、リスナーはいますか?

ここでの私のアプローチは、imageView をロードするまでに progressDialog を表示し、imageView が完全にロードされた後に非表示にすることです。

progressDialog の表示/非表示に使用する方が良いと思われる他の提案はありますか? ありがとう!

4

2 に答える 2

2

ここでは非同期タスクを使用します。(ローダーも同様に機能しますが、非同期タスクは説明が少し簡単です。)

 private class LoadSVGTask extends AsyncTask<Integer, Void, Drawable> {

  protected Drawable doInBackground(Integer... res) {
  mProgressBar.setVisibility(View.Visible);
  svg = SVGParser.getSVGFromResource(getResources(),res); 
  Drawable d = svg.createPictureDrawable();
  return d;
 }

 // gets executed in main thread
 protected void onPostExecute(Drawable result) {
 mProgressBar.setVisibility(View.Gone);
     mImageView.setImageDrawable(result);
 }
}

次のコマンドでタスクを起動します。

new LoaderSVGTask().execute(R.raw.gf, null, null);

参照: http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-01-31T10:34:27.000 に答える
1

その中でAsyncTaskを参照するだけです

protected void onPreExecute (){
   progressDialog.show(......);

}

protected abstract Result doInBackground (Params... params){
  //load your image from here
}

protected void onPostExecute (Result result){
 progressDialog.dismiss();
}
于 2013-01-31T10:25:06.393 に答える