Canvas AndroidX 中的 clipOutRect 兼容性

Canvas clipOutRect compatibility in AndroidX

我最近发现 clipRect(Rect,Region.Op) 已被弃用,我想将其与 DIFFERENCE 一起使用。这被替换为 clipOutRect(Rect) 因此我实现了:

@Suppress("DEPRECATION")
fun clipOutRect(canvas: Canvas, rect: Rect) =
    if (SDK_INT >= O) canvas.clipOutRect(rect)
    else canvas.clipRect(rect, DIFFERENCE)

现在看来这可能是 AndroidX 中的一种兼容方法,但出于某种原因我无法弄清楚,在哪里可以找到它。

是否有 class 已经为 clipOutRect(Rect) 提供了兼容方法?

简短的回答是 - 不。在 AndroidX 中唯一与 Canvas 相关的是这个文件:https://github.com/aosp-mirror/platform_frameworks_support/blob/androidx-master-dev/core/core-ktx/src/main/java/androidx/core/graphics/Canvas.kt

长答案。 首先,Canvas是通过native代码传递给view的,所以在ViewCompatclass里面有onDrawCompat(canvas: CanvasCompat)这样的东西会很别扭。我认为根本没有理由这样做。 此外,这真的不是您应该担心的那种类型的弃用。 例如 WifiManager.startScan() 被标注为

This method was deprecated in API level 28. The ability for apps to trigger scan requests will be removed in a future release.

也就是说 Change this code now, or it will be broken year later

clipRect 情况并非如此,它将被保留以向后兼容多年甚至十年都不会更新的应用程序。弃用警告就像 Hey, we have new method with better functionality/name, if you target minimum is API 26 you can use that