我正在尝试绘制动画。为此,我扩展了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/