首页 > 解决方案 > 为什么 View 上的 `onDraw()` 方法接收可为空的画布

问题描述

在使用自定义视图中,我onDraw(canvas:Canvas?)多次覆盖方法,但我不明白为什么这个方法会得到一个可为空Canvas的,视图不应该在绘制时总是有一个画布来绘制吗?我还断言它为非 null 并且它有效,但我不想冒这个风险,可能在某些时候它会变为 null。所以首先我想了解在什么情况下参数可以为空?

或者它只是来自 java 到 kotlin 的转换过程,我可以安全地?从参数中删除?

谢谢

标签: androidcanvas

解决方案


因为 Android API 最初是用 Java 编写的。在 Java 中,没有不可为空的值。由于 Kotlin 需要与该 Java API 兼容,因此它需要是一个可为空的参数。

如果你真的得到一个空值,那就是框架中的一个错误。我从未见过它发生。我认为如果它抛出 NullPointerException 是安全的,因为你永远不应该看到它。

作为记录,即使是 Android 框架也不会检查该参数是否为 null - 如果您传入 null,TextView.onDraw 将崩溃。


推荐阅读