2015-11-20 15 views
14

私は、透明な背景を持つ相対的なレイアウトを持っています。描画キャッシュやキャンバスを使用してビットマップをキャプチャすると、私は手段の多くを試してみましたが、実際の作業がどこにある何の成功は...透明な背景を持つ相対レイアウトのスナップショットをキャプチャすると、黒の背景が透明でないビットマップが得られます。

rl_mainCanvesLayout.setDrawingCacheBackgroundColor(Color.TRANSPARENT); 
Bitmap bitmap =Bitmap.createBitmap(rl_mainCanvesLayout.getDrawingCache()); 
rl_mainCanvesLayout.setDrawingCacheEnabled(false); 
Bitmap bitmap = Bitmap.createBitmap(rl_mainCanvesLayout.getDrawingCache()); 

private String savebitmap(Bitmap bitmap, String filename) { 
    String dir = Environment.getExternalStorageDirectory() + File.separator + "abc"; 
    File file_dir = new File(dir); 
    file_dir.mkdir(); 
    FileOutputStream outStream = null; 
    File file = new File(dir, filename + ".jpg"); 
    if (file.exists()) { 
     file.delete(); 
     file = new File(dir, filename + ".jpg"); 
     Log.e("file exist", "" + file + ",Bitmap= " + filename); 
    } 
    try { 
     outStream = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 

    } 
    Log.e("file", "" + file); 
    return file.toString(); 

} 
+2

PNG形式で保存してください。JPEGには透過性のサポートがありません。 –

+0

それは働きました。 –

答えて

6

getDrawingCache()メソッドのソースによると、それはいくつかのコールの後buildDrawingCache()で終わるん、これは黒に変換完了しました。ここでは、ビットマップを作成し、それをキャンバスで描画します。この場合、返されたビットマップのカラーマップ(行14450 eraseColorが呼び出されていない)を設定しないと、デフォルト値のままになります。後であなたのレイアウトを描くように、それ自身とそれ以外のものを除いては何も気にしません。この結果、それらのピクセルが割り当てられていない黒い背景が表示されます。

可能なワークフローは、異なる値のdrawingCacheBackgroundColorを設定することです。この値は0ではないか、または相対レイアウトのカラー属性を設定します。これにより、目的の背景色を得ることができます。

レイアウトのスナップショットを取得することを意図していて、実際の背景(他のビュー、アクティビティなど)の場合は、親から描画キャッシュを取得し、このレイアウトの描画キャッシュに画像編集または単純にスクリーンショットを撮り、レイアウトの領域を切り抜くだけです。

関連する問題