0

Android の専門家、助けが必要です。私は Android 初心者です。メイン UI スレッドの外側からキャンバスを使用してビットマップを描画する必要があるアプリケーションがあります。たまたま SurfaceView クラスを見つけて、簡単なデモを作成しました。別のビットマップ インスタンスを作成し、そこに描画します。surfaceView の OnDraw が発生したら、このビットマップを SurfaceView にコピーします。たとえば、ホーム画面に戻るなど、アクティビティが終了するまではうまく機能します。その時点で、SurfaceView スレッドが停止したように見え、作業していたビットマップ イメージが失われたようです。アプリに戻ると、最初からやり直します。

パフォーマンス上の理由から、メイン UI スレッドとは別のスレッドからキャンバス 2D 描画呼び出しを使用してビットマップ イメージを作成したいと考えています。ときどき、そのビットマップをメイン ユーザー インターフェイスに取り込む必要があります。また、アクティビティが一時停止または停止されたときに、ビットマップ イメージを保持し、(最新の状態に保つために) 描画し続ける必要があります。

すべての描画をメイン UI スレッドで行う必要があるため、SurfaceView が唯一の解決策のようです。しかし、私が望んでいたようにはうまくいきません。

実行を停止することのないバックグラウンド タスクまたはスレッドが必要で、そこにビットマップ イメージを作成する必要があります。また、そのビットマップをメイン ユーザー インターフェイスに時々取得する必要があります (10 Hz の更新など)。

ヘルプ!どうすればいいですか?

4

1 に答える 1

0

asynctask を使用して、UI に画像を描画します。

ただし、アプリを再度開いたときにキャンバスを再描画する必要があります。作成したビットマップを保存する場合は、どこかに保存する必要があります。これはキャッシュを使用して処理できると思います:

view.setDrawingCacheEnabled(true);

それ以外の場合は、ビットマップを自分で管理することを検討してください。

v1.setDrawingCacheEnabled(true); 
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
于 2012-06-05T16:42:32.070 に答える