gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:31:02 80 4
gpt4 key购买 nike

我正在尝试绘制动画。为此,我扩展了 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 View.onDraw() 总是有一个干净的 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2423327/

80 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com