首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捕获具有透明背景的相对布局的快照会得到黑色背景不透明的位图

捕获具有透明背景的相对布局的快照会得到黑色背景不透明的位图
EN

Stack Overflow用户
提问于 2015-11-20 16:27:44
回答 1查看 931关注 0票数 14

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

代码语言:javascript
复制
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();

}
EN

回答 1

Stack Overflow用户

发布于 2015-11-28 00:25:54

根据getDrawingCache()方法的源代码,它在几次调用后最终在buildDrawingCache()中结束,这是真正的工作完成的地方。在这里,它创建一个位图,然后用画布绘制它。在您的情况下,设置透明颜色,它等于0,因此,它不设置返回的位图的颜色图(在行14450 eraseColor未调用时),它将其保留为默认值。稍后,当它绘制您的布局时,除了它自己和它的子项之外,它不关心任何事情。结果,你得到了黑色的背景,因为这些像素没有被赋值。

一种可能的解决方法是设置不同的drawingCacheBackgroundColor,该值不为0,或者为相对布局设置颜色属性。通过这些,你可以得到想要的背景颜色。

如果你的意图是获得布局的快照和它的真实背景(其他视图,活动等),那么你应该从它的父级获取绘图缓存,并通过图像编辑将其应用到该布局的绘图缓存中,或者只是简单地截图并裁剪布局的区域。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33822074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档