我正在开发一个项目,我在其中创建了一个透明背景的自定义视图。现在我想创建一个这个视图的图像。我使用以下代码从位图保存和创建图像,但生成的图像具有黑色背景而不透明。我想要透明的背景。我怎样才能做到这一点?
view = suraVersesFragment.getMyView();
view.setBackgroundColor(Color.TRANSPARENT);
Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
c.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
view.draw(c);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.png");
try {
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
要接收视图的非缩放位图,可以在启用绘图缓存
后调用此方法view.getDrawingCache()
api告诉了这个方法:
返回缓存此视图图形的位图。禁用缓存时返回的位图为null。如果启用了缓存且缓存未就绪,则此方法将创建缓存。启用缓存时,调用draw(android.graphics.Canvas)不会从缓存中绘制。要从缓存中受益,您必须通过调用此方法来请求绘图缓存,并在返回的位图不为空时在屏幕上绘制它。
关于兼容模式下自动缩放的注意事项:如果未启用自动缩放,此方法将创建与此视图大小相同的位图。由于此位图将由父ViewGroup绘制,因此屏幕上的结果可能会显示缩放工件。要避免此类瑕疵,应通过将自动缩放设置为true来调用此方法。但是,这样做会生成与视图大小不同的位图。这意味着您的应用程序必须能够处理此大小。
您也可以设置背景颜色
view.setDrawingCacheBackgroundColor(Color.XY)
你也可以在这里查看: http://developer.android.com/reference/android/view/View.html#getDrawingCache(boolean) http://developer.android.com/reference/android/view/View.html#getDrawingCache() http://developer.android.com/reference/android/view/View.html#setDrawingCacheBackgroundColor(int)
答案 1 :(得分:0)
嗨嗨试试透明
Bitmap bitmap= Bitmap.createBitmap(255, 255, Bitmap.Config.ARGB_8888);
之后尝试这一行(A是alpha值区间是0-255而0是完全透明的)。
bitmap.eraseColor(Color.argb(AAA,RRR,GGG,BBB));