Android View.onDraw()总是有一个干净的画布

Cas*_*eyB 17 android android-ui android-canvas

我想画一个动画.为此,我扩展了View并覆盖了onDraw()方法.我所期待的是每次调用onDraw()时画布都会处于我留下的状态,我可以选择清除它或者只是绘制它的一部分(这是我使用SurfaceView时的工作原理) )但每次画布回来时都已清除.有没有办法让我无法清除它?或者可能将以前的状态保存到位图中,这样我就可以绘制该位图然后在其上方绘制?

dwe*_*ebo 28

我不确定是否有办法.但是对于我的自定义视图,每次调用onDraw()时都要重绘所有内容,或者绘制到位图然后将位图绘制到画布上(就像你在问题中建议的那样).

我是这样做的

class A extends View {

    private Canvas canvas;
    private Bitmap bitmap;

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (bitmap != null) {
            bitmap .recycle();
        }
        canvas= new Canvas();
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas.setBitmap(bitmap);
    }
    public void destroy() {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
    public void onDraw(Canvas c) {
      //draw onto the canvas if needed (maybe only the parts of animation that changed)
      canvas.drawRect(0,0,10,10,paint);

      //draw the bitmap to the real canvas c
      c.drawBitmap(bitmap, 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
    }
}
Run Code Online (Sandbox Code Playgroud)