如何将布局视图转换为位图,不包括某些组件

时间:2017-07-03 05:39:55

标签: android android-layout android-bitmap

在我的布局中我有一个背景,按钮和一个textView,这里的按钮用于将我的视图转换为位图并保存它

我设法做到了,但我的png图像也包含了保存按钮,

我使用此行从我的布局中获取绘图:

Bitmap cache = vw.getDrawingCache();

我想要实现的是,在从视图中获取屏幕之前,我希望它不考虑我的按钮。

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用画布绘制这样的布局

 Bitmap bitmap = Bitmap.createBitmap(layout.getWidth(), layout.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    layout.draw(canvas);

答案 1 :(得分:0)

您是否考虑过将组件设置为可见性?

Button saveButton = (Button) findViewById(R.id.save_button);
saveButton.setVisibility(View.GONE);

然后在获得快照后确保执行

saveButton.setVisibility(View.VISIBLE);

此解决方案的问题在于屏幕截图仍然包含按钮所在的间隙。在保存位图之前,不会重新绘制视图。我试过调用invalidate()requestLayout()但没有成功(这就是我找到你的问题的原因)。

另外,另一种选择是通过将其绘制到Canvas来做类似Anand所说的事情。如果您的视图大于屏幕,这将非常有用。通过将其绘制到Canvas,您可以获得整个视图。通过这条路线,你可以拥有一个带背景和TextView的容器,并在该容器外面有一个按钮。然后,您可以使用容器获取视图。 (我不能使用这个解决方案,因为我的按钮位于我想要的数据中间)

View v = findViewById(R.id.my_view); // the view containing your text view
// not needed since it is outside your my_view now
// v.findViewById(R.id.save_button).setVisibility(View.GONE);
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
// not needed since it is outside your my_view now
// v.findViewById(R.id.save_button).setVisibility(View.VISIBLE);

// your Bitmap "b" now contains the image you want