По сравнению с рисованием на экране вам нужно установить параметры макета, меру и макет, как говорит @CommonsWare.
В моем приложении я рисую вид для сохранения в PNG и для печати, но вы можете на растровом изображении PDF-документ.
Обратите внимание, что этот метод не очень хорошо работает с прокручиваемыми объектами, потому что вы обычно получаете только то, что будет показано на экране.
В моем случае я у меня есть большое TableLayout внутри scrollview, поэтому я рисую TableLayout в растровом изображении, а не в scrollView.
Я генерирую TableLayout
с именем view
, затем для сохранения в PNG я делаю следующее (это может быть легко адаптировано для PDF-документа)
Извлечение кода, который я использую (так как я использую тот же код для рисования на экране, а также после того, как он был выложен, я нахожу по Id именно то, что я хочу сохранить в PNG )
int tableLayoutId = 1;
float scaleFactor = 0.5f;
TableLayout tableLayout = new TableLayout(DetailedScoresActivity.this);
tableLayout.setId(tableLayoutId);
// More code to fill out the TableLayout and return it as `view`
// .....
// Then Need to full draw this view as it has not been shown in the gui
view.setLayoutParams(new TableLayout.LayoutParams(TabLayout.LayoutParams.WRAP_CONTENT,
TabLayout.LayoutParams.WRAP_CONTENT));
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
TableLayout tableLayout = view.findViewById(tableLayoutId);
Canvas bitmapCanvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(Math.round(tableLayout.getWidth() * scaleFactor), Math.round(tableLayout.getHeight() * scaleFactor), Bitmap.Config.ARGB_8888);
bitmapCanvas.setBitmap(bitmap);
bitmapCanvas.scale(scaleFactor, scaleFactor);
tableLayout.draw(bitmapCanvas);