0

アプリケーションで問題が発生しました。私は一連の内部 iPad アプリを iOS から Android に移植しており、画像シーケンスはそれらの設計に不可欠です。これらは、標準のフルスクリーンの停止、開始、一時停止機能を必要とし、これらはすべて ImageView のサブクラスから正常に機能します。しかし、現在、ロックされたプロセス ダイアログが表示され続ける前に通過する 300 枚の画像のうち 2 枚しか表示されていません。

メインスレッドをロックせずに画像/背景を設定する「良い」方法はありますか?

参考までに AnimateDrawable は、一時停止/再開機能を提供せず、シーケンスの数が簡単に数百になり、平均して数百フレームの長さになるため、必要なものには理想的ではありませんでした。

4

2 に答える 2

1

AsyncTaskを使用して画像を非同期に読み込むことができます

画像の読み込みに関連するコードをdoInBackgroundメソッドに配置し、進行状況バーや進行状況ダイアログなどのインジケーターを設定して、読み込みの開始時にダイアログまたはバーの表示を開始し、終了後にonPostExecuteメソッドのハンドラーを使用してダイアログを閉じます。

サンプルコード:

 class SomeClass extends Activity {
protected ProgressDialog pd ;
protected Handler handler = new Handler(){
@Override 
public void handleMessage(int what){
   if(pd.isShowing())
      pd.dismiss();
}
     .....

     class LoadImageTask extends AsyncTask<URL, Integer, Long> {
          protected void onPreExecute(Long result) {
            pd = ProgressDialog.show(getContext(),"Title","Message");
         }

         protected Long doInBackground(URL... urls) {

          //Load IMAGEs code
             return totalSize;
         }



         protected void onPostExecute(Long result) {
             //finish loadiing images
              handler .sendEmptyMessage(0);
         }
     }
    }

これがお役に立てば幸いです

于 2012-07-03T11:25:33.097 に答える
0

ムハンナドの答えに追加するいくつかのこと:

  • 必ずしも AsyncTask で行う必要はありません。スレッドで行います。
  • 画像を専用のビットマップにレンダリングしてから、 Canvas.drawBitmap()を使用してonDraw()でレンダリングし、UI スレッドでのレンダリングに費やす時間を節約することができます。
于 2012-07-03T18:05:12.877 に答える