在画布上绘制片段视图

4
我试图将片段的视图绘制到画布上以导出为图片。 我尝试遵循这个问题:Android: Draw a view on canvas 并成功地将填充的视图绘制到画布上,但是当我尝试将片段的视图绘制到画布上时,会破坏布局。
这是我的片段宿主:
<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()

这是结果(黑色正方形为预览图像视图):

片段在片段主机中绘制正确,而且在调用测量和布局方法之后也是如此。

另一个片段给出类似的结果(正方形是预览图像视图):

我错过了什么?

编辑:似乎layout(0, 0, 1000, 1000)会搞乱布局,但我找不到原因。

2个回答

1
找到问题出在使用了RelativeLayoutmatch_parentwrap_content。看起来它没有正确布局,因此在片段中视图看起来正确,但在手动测量时不正确。
通过将RelativeLayout包装在LinearLayout中,并给不对齐的元素一个固定的大小(px或dp),最终解决了问题!

0

也许这些视图是硬件加速的。尝试使用PixelCopy


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接