【发布时间】:2021-08-30 23:24:05
【问题描述】:
我正在尝试获取可滚动表格的屏幕截图。 TableLayout 具有父级匹配的宽度/高度和右/左填充。 TableRows 的宽度/高度有 wrap_content 和 textAlignment center。
经过一些工作,我得到了这段代码:
private Bitmap getBitmapFromView(View view)
{
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.draw(canvas);
return bitmap;
}
虽然它确实获取了所有信息,但它没有正确获取填充和/或 textAlignment,显示的文本彼此太近。
这就是它的外观和外观: Image
我也尝试了不同的方法:
Bitmap bitmap = getBitmapFromView(TableLayout, TableLayout.getHeight(), TableLayout.getWidth());
private Bitmap getBitmapFromView(View view, int height, int width) {
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null)
bgDrawable.draw(canvas);
else
canvas.drawColor(Color.WHITE);
view.draw(canvas);
return bitmap;
}
虽然这确实保留了填充/对齐,但它始终返回除最后一行之外的每一行(添加新行时)。 所以如果我有 20 行,它只返回 19。
当我删除一行(被删除的行所在的位置)时,它也会留下一个空格。
在获取屏幕截图之前,它似乎没有正确更新 TableLayout。 我试过使用:
view.invalidate();
view.requestLayout();
但没有结果。
在第一种方法中,它获取所有数据(添加时)并且不返回已删除行所在的空格(删除时),但它存在填充/对齐问题,而在第二种方法中它获取不完整的数据。
【问题讨论】:
-
你真的不应该调用布局或测量。它会搞砸视图在父级内部的放置。这可能是您的间距问题的一部分。
标签: java android-studio screenshot android-tablelayout scrollable