Android View类';onDraw方法是否通过?
AndroidAndroid View类';onDraw方法是否通过?,android,android-canvas,android-view,ondraw,Android,Android Canvas,Android View,Ondraw,AndroidView类有一个名为onDraw的方法,并且onDraw得到一个画布。只有用户从不显式创建要传递的画布,并且似乎没有其他方法来访问它 传递给onDraw的画布是什么,它是在哪里创建的,有没有访问它的方法 谢谢您的帮助。从 视图隐式地具有与其关联的画布。当从特定视图中调用invalidate()时,或针对特定视图(即视图v,然后调用v.invalidate())时,与该视图关联的画布将发送到视图的onDraw方法 当视图包含其他视图时,将从发出invalidate调用的视图开始遍历和
View
类有一个名为onDraw
的方法,并且onDraw得到一个画布。只有用户从不显式创建要传递的画布,并且似乎没有其他方法来访问它
传递给onDraw
的画布是什么,它是在哪里创建的,有没有访问它的方法
谢谢您的帮助。从
视图隐式地具有与其关联的画布。当从特定视图中调用invalidate()时,或针对特定视图(即视图v,然后调用v.invalidate())时,与该视图关联的画布将发送到视图的onDraw方法
当视图包含其他视图时,将从发出invalidate调用的视图开始遍历和重新绘制层次视图树 视图层次结构中最顶层的类
ViewRootImpl
,为整个可见窗口请求一个Canvas
,并将其传递到活动的顶层视图组
。然后,每个ViewGroup
将此Canvas
的连接子集版本传递给每个子View
的draw()
方法
据我所知,不可能在onDraw()
(和相关方法)之外操纵Canvas
您可以尝试使用自己控制的Canvas
的新实例调用draw()。这不会在屏幕上绘制任何内容,但您可以在课堂上的其他地方阅读画布,将其转换为位图等。请参见以下示例:只需在View.onDraw中设置断点并扫描以下帧,其中一个应该是viewRootCanvasCanvas
对象只是本地2D库函数的包装器,在绘图表面上有一个锁。如果要访问该绘图表面,则必须访问专用API才能访问,而且这样做是不明智的。在onDraw
之外,您到底想做什么?如果我们知道你的意图,我们可能会更好地建议如何实现它。