Android 在画布上绘制片段视图

Android 在画布上绘制片段视图,android,android-fragments,android-view,Android,Android Fragments,Android View,我试图将片段的视图绘制到画布上,以将其导出为图像。 我尝试了以下问题:并设法在画布上绘制一个膨胀视图,但当我尝试在其上绘制片段视图时,它会弄乱布局 这是我的片段主机: <FrameLayout android:layout_width="1000px" android:layout_height="1000px" android:visibility="invisible" tools:ignore="PxUsage"

我试图将片段的视图绘制到画布上,以将其导出为图像。 我尝试了以下问题:并设法在画布上绘制一个膨胀视图,但当我尝试在其上绘制片段视图时,它会弄乱布局

这是我的片段主机:

<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()
supportFragmentManager.beginTransaction()
.replace(R.id.fragment\u主机,MyTrackViewerFragment().apply{
onCreateControls={
bitmap=bitmap.createBitmap(10001000,bitmap.Config.ARGB_8888)
val画布=画布(位图)
申请{
layoutParams=LinearLayout.layoutParams(10001000)
测量(测量宽度、测量高度)
布局(0,0,1000,1000)
绘制(画布)
}
findViewById(R.id.preview).setImageBitmap(位图)
ImageView.ScaleType.CENTER\u裁剪
supportFragmentManager.beginTransaction().remove(this.commit())
}
})
.commit()
这是结果(黑色正方形是预览图像视图):

片段宿主中的片段也在调用measure和layout方法后正确绘制

不同的片段给出了类似的结果(正方形是预览图像视图):

我错过了什么


编辑:似乎
布局(0,0,1000,1000)
把布局搞砸了,但我不明白为什么可能这些视图是H/W加速的。试着改用。

发现了
相对长度
和使用
匹配父项
包装内容
的问题。看起来它没有正确布局,因此在片段中的视图看起来是正确的,但在手动测量时却不正确

通过将RelativeLayout包装在线性布局中,并给未对齐的元素一个固定大小(px或dp),它最终成功了