在 canvas 上绘制片段视图
Draw a fragments view on a canvas
我正在尝试将片段的视图绘制到 canvas 上以将其导出为图像。
我尝试遵循这个问题:Android: Draw a view on canvas 并设法在 canvas 上绘制了一个膨胀视图,但是当我尝试在其上绘制片段视图时,它弄乱了布局。
这是我的片段宿主:
<FrameLayout
android:layout_width="1000px"
android:layout_height="1000px"
android:visibility="invisible"
tools:ignore="PxUsage"
android:id="@+id/fragment_host"/>
这就是我在 canvas
上画画的方式
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)
弄乱了布局,但我找不到原因
也许这些观点 H/W 加速了。请尝试使用 PixelCopy。
发现问题与 RelativeLayout
和 match_parent
或 wrap_content
的使用有关。看起来它没有正确布局,因此视图在 Fragment 中看起来是正确的,但在手动测量时却不是。
通过将 RelativeLayout 包装在 LinearLayout 中并为未对齐的元素提供固定大小(px 或 dp),它终于奏效了!
我正在尝试将片段的视图绘制到 canvas 上以将其导出为图像。 我尝试遵循这个问题:Android: Draw a view on canvas 并设法在 canvas 上绘制了一个膨胀视图,但是当我尝试在其上绘制片段视图时,它弄乱了布局。
这是我的片段宿主:
<FrameLayout
android:layout_width="1000px"
android:layout_height="1000px"
android:visibility="invisible"
tools:ignore="PxUsage"
android:id="@+id/fragment_host"/>
这就是我在 canvas
上画画的方式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)
弄乱了布局,但我找不到原因
也许这些观点 H/W 加速了。请尝试使用 PixelCopy。
发现问题与 RelativeLayout
和 match_parent
或 wrap_content
的使用有关。看起来它没有正确布局,因此视图在 Fragment 中看起来是正确的,但在手动测量时却不是。
通过将 RelativeLayout 包装在 LinearLayout 中并为未对齐的元素提供固定大小(px 或 dp),它终于奏效了!