我正在尝试绘制动画。为此,我扩展了View并覆盖了onDraw()方法。我希望的是,每次调用onDraw()时, Canvas 都处于我留在其中的状态,因此我可以选择清除它或只覆盖其中的一部分(这是我使用SurfaceView时的工作方式) ),但每次 Canvas 返回时都已清除。有没有办法我不能清除它?还是将以前的状态保存到位图中,这样我就可以绘制该位图,然后在其上方绘制?

最佳答案

我不确定是否有办法。但是对于我的自定义 View ,我要么在每次调用onDraw()时重绘所有内容,要么绘制到位图,然后将位图绘制到 Canvas 上(就像您在问题中所建议的那样)。

这是我的方法

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);
    }
}

关于android - Android View.onDraw()始终具有干净的Canvas,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2423327/

10-11 00:00