2017-01-09 8 views
1

にプログラム的に作成されたビューを描く:私は、プログラム的に作成したビューのビットマップを作るので、好きに描画キャッシュを使用しようとしていますビットマップ

LinearLayout view = new LinearLayout(context); 
view.setBackground(context.getResources().getColor(R.color.green)); 
view.setDrawingCacheEnabled(true); 

int width = View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.EXACTLY); 
int height = View.MeasureSpec.makeMeasureSpec(600, View.MeasureSpec.EXACTLY); 
view.measure(w, h); 
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 
view.buildDrawingCache(true); 

Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); 

は、私は、出力800×600グリーンビットマップにそれを期待します。代わりに800x600の白いビットマップが得られます。私は間違って何をしていますか? @CommonsWareへ

+0

を解決しますそのようにその場でビューのサイズを変更してください。システムが設定されていません。 –

+0

@GabeSechan:実際、それはOKであるはずです。私はインストルメンテーションテストでそれをやっています。 – CommonsWare

+1

「800x600の緑のビットマップを出力すると思います」 - なぜですか? 'LinearLayout'は魔法のように緑色ではなく、緑色にするためのコードはありません。それを超えて、あなたはどこにでも描いていません。すべての描画キャッシュの内容を取り除き、 'Bitmap'に裏打ちされた' Canvas'を作成し、その 'Canvas'へのビューを' draw() 'します。 'Bitmap'は図面の結果を含みます。 – CommonsWare

答えて

0

おかげで、この作品:

LinearLayout view = new LinearLayout(context); 
    view.setBackgroundColor(context.getResources().getColor(R.color.green)); 
    int width = View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.EXACTLY); 
    int height = View.MeasureSpec.makeMeasureSpec(600, View.MeasureSpec.EXACTLY); 
    view.measure(width, height); 

    Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 
    view.draw(canvas); 
0

をあなたはビットマップを作成するためのコードの下に使用することができ、プログラム的

int w = WIDTH_PX, h = HEIGHT_PX; 
Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types 
Bitmap bmp = Bitmap.createBitmap(w, h, conf); // 
Canvas canvas = new Canvas(bmp); 

希望、それはあなただけではなく、することができ、あなたの問題

関連する問題