我想绘制的动画。要做到这一点我已经扩展查看并覆盖了的onDraw()方法。我会想到的是,每一次的onDraw()被调用画布会在我离开时的状态,我可以选择清除它,还是吸取了它的部分(这是当我用了一个SurfaceView它是如何工作的),但每个画布回来时已经被清除。有没有一种方法,我不能有它清除?或者,也许保存以前的状态成位图这样我就可以绘制位图,然后绘制了它的顶部?

有帮助吗?

解决方案

我不知道是否有一种方法或没有。但对于我的自定义视图,我不是重绘一切每次的onDraw()被调用,或绘制成位图,然后绘制位图到画布上(就像你在你的问题的建议)。

下面为i如何做到这一点

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

其他提示

你应该看看这里看到的基本观点和surfaceView之间的差异。一个surfaceView具有绘图专用层,我想跟踪你画的是什么了。现在,如果你真的想这样做的一个基本看法,你可以尝试把每个绘制项目在数组中,喜欢的为的MapView 逐项叠加。 它应该工作几乎相同的方式

您预期不不愿寄希望于瓦特/现实:)画布不会是你离开的方式,但它不是空白。您可以创建对象的ArrayList要绘制(canvas.drawCircle(),canvas.drawBitmap()等),然后遍历尽管在OnDraw中ArrayList的()。我是新来的图形编程,但我已经使用这个小规模。也许有一个更好的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top