Java Android Studio 屏幕截图 TableLayout
Java Android Studio Screenshot A TableLayout
我正在尝试获取可滚动 table 的屏幕截图。
TableLayout 具有父匹配 width/height 和 right/left 填充。
TableRows width/height 有 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;
}
虽然它确实获得了所有信息,但它没有获得填充 and/or 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;
}
虽然这确实保留了 padding/alignment 它总是 return 除了最后一行之外的每一行(添加新行时)。
所以如果我有 20 行,它 return 只有 19.
当我删除一行(删除行所在的位置)时,它也会留下白色 space。
似乎在截屏之前没有正确更新 TableLayout。
我试过使用:
view.invalidate();
view.requestLayout();
但是没有结果。
在第一种方法中,它获取所有数据(添加时)并且 return 白色 spaces 已删除的行(删除时)但它有 padding/alignment问题,而在第二种方法中它获得不完整的数据。
第二种方法应该有效,但只能在 table 完成工作后才能使用。
您可以创建一个ViewTreeObserver.OnGlobalLayoutListener
,将截图代码放入其中,等待table完成工作。
ViewTreeObserver.OnGlobalLayoutListener tableLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver observer = yourTableLayout.getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
observer.removeOnGlobalLayoutListener(this);
} else {
observer.removeGlobalOnLayoutListener(this);
}
//Your code here
}
};
您可以使用
创建它
yourTableLayout.getViewTreeObserver().addOnGlobalLayoutListener(tableLayoutListener);
我正在尝试获取可滚动 table 的屏幕截图。 TableLayout 具有父匹配 width/height 和 right/left 填充。 TableRows width/height 有 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;
}
虽然它确实获得了所有信息,但它没有获得填充 and/or 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;
}
虽然这确实保留了 padding/alignment 它总是 return 除了最后一行之外的每一行(添加新行时)。 所以如果我有 20 行,它 return 只有 19.
当我删除一行(删除行所在的位置)时,它也会留下白色 space。
似乎在截屏之前没有正确更新 TableLayout。 我试过使用:
view.invalidate();
view.requestLayout();
但是没有结果。
在第一种方法中,它获取所有数据(添加时)并且 return 白色 spaces 已删除的行(删除时)但它有 padding/alignment问题,而在第二种方法中它获得不完整的数据。
第二种方法应该有效,但只能在 table 完成工作后才能使用。
您可以创建一个ViewTreeObserver.OnGlobalLayoutListener
,将截图代码放入其中,等待table完成工作。
ViewTreeObserver.OnGlobalLayoutListener tableLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver observer = yourTableLayout.getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
observer.removeOnGlobalLayoutListener(this);
} else {
observer.removeGlobalOnLayoutListener(this);
}
//Your code here
}
};
您可以使用
创建它yourTableLayout.getViewTreeObserver().addOnGlobalLayoutListener(tableLayoutListener);