帆布?或 View.onDraw() 方法中的 Canvas

Posted

技术标签:

【中文标题】帆布?或 View.onDraw() 方法中的 Canvas【英文标题】:Canvas? or Canvas in the View.onDraw() method 【发布时间】:2019-11-19 12:21:43 【问题描述】:

android Studio 在 View 类中生成 onDraw() 方法,如下所示:

override fun onDraw(canvas: Canvas?) 
    super.onDraw(canvas)

但在 Google 的许多示例(代码实验室、课程等)中,我看到了另一个版本

override fun onDraw(canvas: Canvas) 
    super.onDraw(canvas)

哪个版本是正确的?为什么?

【问题讨论】:

【参考方案1】:

fun onDraw(canvas: Canvas?)

此案例画布可能为空。它接受空值,因此应用程序可能是崩溃的空画布对象。所以我们必须在所有地方处理可空性。

onDraw(canvas: Canvas)

这个案例画布不能为空。所以我们不关心可空性。我们可以避免应用程序崩溃,所以这是最好的。

【讨论】:

这解释了什么是可选的,但没有解释为什么 onDraws 默认参数是可选的。

以上是关于帆布?或 View.onDraw() 方法中的 Canvas的主要内容,如果未能解决你的问题,请参考以下文章

MFC双缓存技术代码

Android 更新视图函数ondraw() 和dispatchdraw()的区别

在 Android 上的 onDraw 之外更新视图的画布

一个自定义View中canvas画图的问题

如何缓慢移动帆布车速表指针?

如何将自定义形状变形/动画成圆形?帆布 JS