在我的布局中我有一个背景,按钮和一个textView,这里的按钮用于将我的视图转换为位图并保存它
我设法做到了,但我的png图像也包含了保存按钮,
我使用此行从我的布局中获取绘图:
Bitmap cache = vw.getDrawingCache();
我想要实现的是,在从视图中获取屏幕之前,我希望它不考虑我的按钮。
提前致谢。
答案 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