Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android View类';onDraw方法是否通过?_Android_Android Canvas_Android View_Ondraw - Fatal编程技术网

Android View类';onDraw方法是否通过?

Android View类';onDraw方法是否通过?,android,android-canvas,android-view,ondraw,Android,Android Canvas,Android View,Ondraw,AndroidView类有一个名为onDraw的方法,并且onDraw得到一个画布。只有用户从不显式创建要传递的画布,并且似乎没有其他方法来访问它 传递给onDraw的画布是什么,它是在哪里创建的,有没有访问它的方法 谢谢您的帮助。从 视图隐式地具有与其关联的画布。当从特定视图中调用invalidate()时,或针对特定视图(即视图v,然后调用v.invalidate())时,与该视图关联的画布将发送到视图的onDraw方法 当视图包含其他视图时,将从发出invalidate调用的视图开始遍历和

Android
View
类有一个名为
onDraw
的方法,并且onDraw得到一个画布。只有用户从不显式创建要传递的画布,并且似乎没有其他方法来访问它

传递给
onDraw
的画布是什么,它是在哪里创建的,有没有访问它的方法

谢谢您的帮助。

视图隐式地具有与其关联的画布。当从特定视图中调用invalidate()时,或针对特定视图(即视图v,然后调用v.invalidate())时,与该视图关联的画布将发送到视图的onDraw方法


当视图包含其他视图时,将从发出invalidate调用的视图开始遍历和重新绘制层次视图树

视图层次结构中最顶层的类
ViewRootImpl
,为整个可见窗口请求一个
Canvas
,并将其传递到
活动的顶层
视图组
。然后,每个
ViewGroup
将此
Canvas
的连接子集版本传递给每个子
View
draw()
方法

据我所知,不可能在
onDraw()
(和相关方法)之外操纵
Canvas


您可以尝试使用自己控制的
Canvas
的新实例调用
draw()。这不会在屏幕上绘制任何内容,但您可以在课堂上的其他地方阅读
画布,将其转换为位图等。请参见以下示例:

只需在View.onDraw中设置断点并扫描以下帧,其中一个应该是viewRootCanvas
Canvas
对象只是本地2D库函数的包装器,在绘图表面上有一个锁。如果要访问该绘图表面,则必须访问专用API才能访问,而且这样做是不明智的。在onDraw
之外,您到底想做什么?如果我们知道你的意图,我们可能会更好地建议如何实现它。