我的项目基于surfaceView,直到现在我已经在onDraw中完成了所有渲染,而我已经覆盖了.一切似乎都没问题.
但是,我刚刚更新了我的SDK,现在它给了我一个错误告诉我:
可疑方法电话; 应该叫"画"而不是"onDraw"
有人可以解释这两者之间的区别吗?
我已经在网上阅读了一些类似的问题,但我没有找到我理解的解释.
谢谢
我尝试清理我的项目,它确实解决了问题.试试吧.
SurfaceView.draw()基本上调用View.draw(); 如果你想实现你的绘图,你应该在View.onDraw()中实现它,你可以实现它甚至在源代码注释中说.
ViewGroup.drawChild()调用此方法以使每个子视图自己绘制.这个draw()方法是一个实现细节,并不打算覆盖或从ViewGroup.drawChild()以外的任何其他地方调用.
至于它们之间的区别:
draw():
13416 /* 13417 * Draw traversal performs several drawing steps which must be executed 13418 * in the appropriate order: 13419 * 13420 * 1. Draw the background 13421 * 2. If necessary, save the canvas' layers to prepare for fading 13422 * 3. Draw view's content 13423 * 4. Draw children 13424 * 5. If necessary, draw the fading edges and restore layers 13425 * 6. Draw decorations (scrollbars for instance) 13426 */
onDraw()为空.它为您实施.
我从来都遇到过这个问题.
我像这样处理它:
1)声明如下方法.
@SuppressLint("WrongCall") public void drawTheView() { theCanvas = null; try{ theCanvas = getHolder().lockCanvas(); if(theCanvas != null) { onDraw(theCanvas); } } finally { getHolder().unlockCanvasAndPost(theCanvas); } }
2)现在你可以修改onDraw()方法:
@Override public void onDraw(Canvas canvas) { //Do some drawing }
你可以从你想要的任何地方调用drawTheView()方法,并以这种方式调用onDraw()方法而不会得到错误...
我认为这是一种实用的方法.