在onDraw()方法之外的Canvas上绘图

use*_*442 4 android canvas ondraw

这是我的OnDraw()方法

void onDraw(Canvas canvas) {
    mCanvas = canvas;
    //invalidate();
    int x = 0;
    Iterator<Letter> it = mNextUpQueue.iterator();
    while(it.hasNext()){
        mCanvas.drawBitmap(it.next().getNext(), mNextUpCoordinates.get(x).x, mNextUpCoordinates.get(x).y, mPaint);
        mCanvas.drawBitmap(mAvailableLetters.get(x).getNotPressed(), mAvailableLettersCoordinates.get(x).x, mAvailableLettersCoordinates.get(x).y, mPaint);
        x++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将canvas设置为全局变量mCanvas.但是,如果我尝试从onDraw()方法外部绘制mCanvas,我会收到错误.是因为我做错了什么还是必须始终在onDraw方法中使用画布?

小智 7

您不能对传递的Canvas进行引用,因为它仅在onDraw(Canvas)方法调用期间有效.

我建议彻底阅读http://developer.android.com/guide/topics/graphics/2d-graphics.html#draw-with-canvas,可能的解释方法很好:

  1. 向该onDraw(Canvas)方法提供的Canvas ,在此方法调用期间.这是在UI线程中完成的,因此这里不应该尝试任何复杂的操作
  2. 到您自己创建的画布.这对于在另一个线程中准备位图然后将位图绘制到给予onDraw(Canvas)方法的Canvas非常有用
  3. 使用SurfaceView,并使用lockCanvas()方法从中获取Canvas对象.