AndroidX 中的 Canvas clipOutRect 兼容性

Posted

技术标签:

【中文标题】AndroidX 中的 Canvas clipOutRect 兼容性【英文标题】:Canvas clipOutRect compatibility in AndroidX 【发布时间】:2019-07-17 12:03:23 【问题描述】:

我最近遇到了 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 中的一种兼容方法,但由于某种原因,我无法弄清楚在哪里可以准确找到它。

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

【问题讨论】:

【参考方案1】:

简短的回答是 - 不。 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 是通过原生代码传递给视图的,所以在 ViewCompat 类中出现 onDrawCompat(canvas: CanvasCompat) 这样的东西会很尴尬。我认为根本没有理由这样做。 此外,这真的不是您应该担心的那种弃用类型。 例如WifiManager.startScan() 带有

此方法在 API 级别 28 中已弃用。应用程序能够 触发扫描请求将在未来版本中删除。

上面写着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

【讨论】:

以上是关于AndroidX 中的 Canvas clipOutRect 兼容性的主要内容,如果未能解决你的问题,请参考以下文章

如何用 Android 数据绑定替换 androidx.fragment.app.FragmentContainerView 中的片段

是否可以使用 AndroidX 导航将片段中的操作栏标题居中?

这个 Flutter 应用程序中的 Gradle 失败 AndroidX 不兼容

错误 - 构建失败可能是由于插件中的 AndroidX 不兼容。该工具即将尝试使用

使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是不是仍然适用?

Gradle 失败可能是因为这个 Flutter 应用程序中的 AndroidX 不兼容