我有一个透明背景的相对布局,其中包含图像,文本等,当我通过使用绘图缓存或画布捕获其位图时,透明色转换为黑色我尝试了很多方法但没有成功...
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();
}
答案 0 :(得分:6)
根据getDrawingCache()方法的来源,它会在几次调用后以buildDrawingCache()结束,这是真正的工作完成的地方。在这里,它创建一个位图,然后用画布绘制它。在你的情况下你设置透明颜色,它等于0,为此,它不设置返回的位图的颜色图(在行14450 eraseColor未调用),它保留默认值。之后,当它绘制你的布局时,除了它自己和它的孩子之外,它不会关心任何事情。因此,您将获得黑色背景,因为这些像素未分配。
可能的工作原理是设置不同的drawingCacheBackgroundColor,该值不为0,或者为相对布局设置颜色属性。通过这些,您可以获得所需的背景颜色。
如果您的目的是获取布局的快照及其真实背景(其他视图,活动等),那么您应该从它的父级绘制缓存并将其应用于此布局& #39;使用图像编辑绘制缓存,或者只是截取屏幕截图并裁剪布局区域。