ビューを完全にオフスクリーンで作成してレンダリングしようとしています。最初に、私は(http://arpitonline.com/2012/07/17/capturing-bitmaps-of-views-in-android/から)試しました:
Bitmap result = Bitmap.createBitmap(1080, 1080, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(result);
view.layout(0, 0, 1080, 1080);
view.draw(c);
return result;
ビューの背景色のみをレンダリングしました。正しいサイズと正しい背景色ですが、内容は完全に空です。それから私はこれにつまずいた:
view.layout(0, 0, 1080, 1080);
view.invalidate();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
Bitmap result = bmp.copy(Bitmap.Config.ARGB_8888, false);
view.destroyDrawingCache();
return result;
しかし、ここでも同じ結果が得られます。内容が空の正しいサイズと背景色です。ビュー内には多くのビューがあり、それらに多くのプロパティを設定し、null ポインターなどはなく、すべてが正しく設定されます。しかし、それらは描かれていません。なぜこれが起こるのでしょうか?
更新: psking が示唆したように、描画ロジックをに移動しましたView#post
が、それでも同じです (完了を起動するのに時間がかかりますが、ビューが実際に何かを実行する手がかりになる可能性があります)。両方の方法を試しました:
(補完はビットマップを取る私の関数です)
final Bitmap result = Bitmap.createBitmap(1080, 1080, Bitmap.Config.ARGB_8888);
final Canvas c = new Canvas(result);
view.layout(0, 0, 1080, 1080);
view.post(new Runnable() {
@Override
public void run() {
view.draw(c);
completion.call(result);
}
});
と
view.layout(0, 0, 1080, 1080);
view.invalidate();
view.setDrawingCacheEnabled(true);
view.post(new Runnable() {
@Override
public void run() {
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
Bitmap result = bmp.copy(Bitmap.Config.ARGB_8888, false);
view.destroyDrawingCache();
completion.call(result);
}
});
しかし、それでも同じです。