如何使view.getDrawingCache()保持透明度

时间:2015-11-27 08:51:37

标签: android

如果我有一个透明背景的视图而我bitmap = view.getDrawingCache();,那么该位图很可能不再透明。黑色背景设置在背景中。

我甚至尝试过

view.setDrawingCacheBackgroundColor(Color.TRANSPARENT);

没有成功。

实际上这种方法允许设置背景颜色而没有任何alpha支持,Color.TRANSPARENT 0x00000000实际上是黑色的,如果你不关心alpha部分...... 如果我使用Color.RED,背景确实非常红色。

任何想法让这项工作?这是当前Android API的限制吗?我可以使用draw()吗?但是我认为这个view.getDrawingCache()(没有缓存)效果不太好?

由于

3 个答案:

答案 0 :(得分:0)

绘制缓存有点像前HW加速Android的遗留物,所以有些东西可能有点令人困惑/没有记录。

只要您遗漏View#setDrawingCacheBackgroundColor(int),透明度就可以正常工作,因为这可能会导致缓存下拉到16位色彩空间(请参阅View#mDrawingCacheBackgroundColor)。

此代码

view.setDrawingCacheEnabled(true);
// wait for first layout
...
Bitmap b = view.getDrawingCache();

应该为您提供具有透明背景的ARGB_8888位图。 (您也可以在Android Studio调试器中通过在获取调用后设置断点并在变量上查看位图来实现此目的。

答案 1 :(得分:0)

在XML文件

中设置透明布局背景颜色后尝试此代码
            layout.setDrawingCacheEnabled(true);
            Bitmap bmp = layout.getDrawingCache();
            File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "smiley1.png");
            FileOutputStream outStream;
            outStream = new FileOutputStream(mFile);
            bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);

答案 2 :(得分:0)

我也通过调用getDrawingCache()方法获得黑色背景的图像。实际上,图像具有透明背景。错误将图像保存为 jpeg格式,因此图库应用会以黑色显示透明像素。

如果将其放置为覆盖层,它将可以完美地工作。这里没有问题。