7

私は単純なペイントアプリに取り組んでおり、ユーザーが要求したときに描画するスペースを増やす機能を実装しようとしています。これは、CustomView クラス (LinearLayout に含まれてからScrollView クラス)。チャンク 1 を実行して CustomView クラスのサイズを変更しなかった場合、チャンク 2 は正常に動作します (1 画面の描画を保存するだけです。この時点では、スクロールはありません)。チャンク 1 を実行すると、チャンク 2 が失敗します (view.getDrawingCache() は null を返します) (このとき、スクロールは有効になっています)。スクロールで抜けた部分も含めて全体を保存したい。

チャンク 1:

CustomView view = (CustomView) findViewById(R.id.customViewId);
height = 2 * height;
view.setLayoutParams(new LinearLayout.LayoutParams(width, height));

チャンク 2:

CustomView view = (CustomView) findViewById(R.id.customViewId);
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);

これら 2 つのコードのチャンクは、2 つの異なる方法で独立した小さな部分です。

編集:解決済み

何十億もの Google クエリの後、問題は解決しました ;)
このスレッドhttps://groups.google.com/forum/?fromgroups=#!topic/android-developers/VQM5WmxPilMを参照しました。
私が理解できなかったのは、getDrawingCache() メソッドには View クラスのサイズ (幅と高さ) に制限があるということでした。View クラスが大きすぎる場合、getDrawingCache() は単純に null を返します。
したがって、解決策はメソッドを使用せず、代わりに以下のようにすることでした。

CustomView view = (CustomView) findViewById(R.id.customViewId);
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), 
  view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
Canvas bitmapHolder = new Canvas(bitmap); 
view.draw(bitmapHolder);
// bitmap now contains the data we need! Do whatever with it!
4

1 に答える 1

3

buildDrawingCache()ビットマップを使用する前に、を呼び出す必要があります。

キャッシュ ビットマップを作成するためにフラグを設定し、次のsetDrawingCache(true)描画パスを待つだけです。

destroyDrawingCache()また、不要になったときも忘れずにお電話ください。

于 2012-12-10T11:52:02.430 に答える