我想从视图创建一个位图,并让位图包含父视图中的背景。
以下代码将捕获视图“v”:
v.buildDrawingCache();
Bitmap b = Bitmap.createBitmap (v.getDrawingCache());
但背景将只是“v”的背景。在这种情况下,“v”具有透明背景,因此“b”具有透明的alpha通道。我希望“b”包含实际显示的背景。
想法?
答案 0 :(得分:3)
我可以建议您使用以下解决方案。由于您可以让几个父母具有半透明背景,您可以捕获整个活动窗口,然后裁剪您需要的部分(您的视图边界)。
例如:
View root = getWindow().getDecorView().getRootView();
root.setDrawingCacheEnabled(true);
root.buildDrawingCache();
// here you got whole screen bitmap
Bitmap screenshot = root.getDrawingCache();
// get view coordinates
int[] location = new int[2];
view.getLocationInWindow(location);
// crop the screenshot
Bitmap bmp = Bitmap.createBitmap(screenshot, location[0], location[1], view.getWidth(), view.getHeight(), null, false);
执行此操作后,您可以始终确保您的位图包含实际显示的背景。
UPD:如果root.getDrawingCache()
无法正常工作,您只需直接在位图上绘制就可以捕获屏幕:
View root = getWindow().getDecorView().getRootView();
Bitmap screenshot = Bitmap.createBitmap(root.getWidth(), root.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(screenshot);
root.draw(canvas);
答案 1 :(得分:0)
尝试v.getBackground()
Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(),v.getBackground());