在 jetpack compose android 中以编程方式截取可组合乐趣的屏幕截图

时间:2021-07-13 02:58:11

标签: android-jetpack-compose

我想将 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 是什么?

1 个答案:

答案 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/桌面上运行)