android – 使用透明背景捕获相对布局的快照,给出了黑色背景不透明的位图

我有一个相对布局与透明背景包含图像,文本等,当我捕获其位图时,使用绘图缓存或画布透明颜色转换为黑色我尝试了很多手段,但没有成功…

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();

}
最佳答案
根据getDrawingCache()方法的来源,它在几个调用之后结束于buildDrawingCache(),这是实际工作完成的地方.在这里,它创建一个位图,然后画一个画布.在您的情况下,您设置透明颜色,等于0,因此,它不设置返回的位图的颜色映射(在14450行擦除颜色未调用),它将其保留为默认值.后来,当它绘制你的布局,它不会关心任何除了自己,这是孩子.因此,您将获得黑色背景,因为这些像素未分配.

为此可能的工作是设置不同的drawingCacheBackgroundColor,该值不为0,或为相对布局设置颜色属性.通过这些,您可以获得所需的背景颜色.

如果您打算获取布局的快照,并且它是真实的背景(其他视图,活动等),那么您应该从其父进程获取绘图缓存,并将其应用于此布局的绘图缓存中,并进行图像编辑,或者只需简单地截取屏幕截图并裁剪布局区域.

转载注明原文:android – 使用透明背景捕获相对布局的快照,给出了黑色背景不透明的位图 - 代码日志