我想将 Jetpack compose 发出的 UI 捕获为位图。在 XML 中,这是这样做的:
基本上将视图作为输入参数并将其作为位图返回。
//take screenshot of the view added as an input argument
fun takeScreenShot(view: View) : Bitmap {
val bitmap = Bitmap.createBitmap(
view.width,
view.height,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
view.draw(canvas)
return bitmap
}
Jetpack compose 中的 this 是什么?
答案 0 :(得分:0)
我会看看 JP-Compose 测试是如何做到这一点的。
一个好的起点可能是 android-compose-codelab,请参阅:
/**
* Simple on-device screenshot comparator that uses golden images present in
* `androidTest/assets`. It's used to showcase the [AnimationClockTestRule] used in
* [AnimatingCircleTests].
*
* Minimum SDK is O. Densities between devices must match.
*
* Screenshots are saved on device in `/data/data/{package}/files`.
*/
@RequiresApi(Build.VERSION_CODES.O)
fun assertScreenshotMatchesGolden(
goldenName: String,
node: SemanticsNodeInteraction
) {
val bitmap = node.captureToImage().asAndroidBitmap()
}
来自ScreenshotComparator.kt。您可以在 AndroidHelpers.kt 中找到 captureToImage()
。
您还可以在此处找到 ImageBitmap.kt,其中 asAndroidBitmap() 仅确保 ImageBitmap 的底层“通用”版本实际上是 Android 上的 android.graphics.Bitmap
(这是为了使代码与平台无关,因此它也可以在 JVM/桌面上运行)