Нарисуйте фрагмент вид на холсте - PullRequest
3 голосов
/ 18 апреля 2020

Я пытаюсь нарисовать вид фрагмента на холсте, чтобы экспортировать его как изображение. Я попытался выполнить следующий запрос: Android: нарисовать вид на холсте и мне удалось нарисовать раздутый вид на холсте, но когда я пытаюсь нарисовать на нем вид фрагментов, он портит компоновку.

Это мой хост-фрагмент:

<FrameLayout
        android:layout_width="1000px"
        android:layout_height="1000px"
        android:visibility="invisible"
        tools:ignore="PxUsage"
        android:id="@+id/fragment_host"/>

Вот как я рисую на холсте

supportFragmentManager.beginTransaction()
        .replace(R.id.fragment_host, MyTrackViewerFragment().apply {
            onCreateControls = {

                bitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888)
                val canvas = Canvas(bitmap)

                it.apply {
                    layoutParams = LinearLayout.LayoutParams(1000, 1000)
                    measure(measuredWidth, measuredHeight)
                    layout(0, 0, 1000, 1000)
                    draw(canvas)
                }

                findViewById<ImageView>(R.id.preview).setImageBitmap(bitmap)
                ImageView.ScaleType.CENTER_CROP
                supportFragmentManager.beginTransaction().remove(this).commit()
            }
        })
        .commit()

Это результат (черный квадрат - изображение для предварительного просмотра view):

image

Фрагмент в хосте фрагмента dr aws правильно, также после вызова метода меры и макета.

Другой фрагмент дает аналогию результаты (квадрат - это изображение для предварительного просмотра):

image

Чего мне не хватает?

РЕДАКТИРОВАТЬ: кажется, layout(0, 0, 1000, 1000) портит макет, но я не могу понять, почему

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Выяснил, что проблема возникла с RelativeLayout и использованием match_parent или wrap_content. Похоже, что он не был правильно размещен, и, таким образом, представление выглядело как-то правильно во фрагменте, но не при измерении вручную.

Оборачивая RelativeLayout внутри LinearLayout и придав выравниваемым элементам фиксированный размер (px или dp ) это наконец-то сработало!

0 голосов
/ 25 апреля 2020

Может быть, эти просмотры ускорены. Попробуйте использовать PixelCopy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...