在画布上绘制片段视图

时间:2020-04-18 12:20:59

标签: android android-fragments android-view

我试图将片段的视图绘制到画布上以将其导出为图像。 我尝试遵循以下问题: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()

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

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

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

我想念什么?

编辑:看来layout(0, 0, 1000, 1000)弄乱了版面,但我找不到原因

2 个答案:

答案 0 :(得分:1)

弄清楚了问题RelativeLayout以及match_parentwrap_content的使用。看起来好像布局不正确,因此在“片段”中看起来有些正确,但是在手动测量时却不正确。

通过将RelativeLayout封装在LinearLayout中,并为未对齐的元素提供固定大小(px或dp),它终于可以工作了!

答案 1 :(得分:0)

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

相关问题