首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅用Android View.onDraw()绘制更改

仅用Android View.onDraw()绘制更改
EN

Stack Overflow用户
提问于 2013-12-16 06:07:15
回答 2查看 693关注 0票数 1

我惊讶地发现,View.onDraw()在画画之前把画布擦干净了。这不是我想要的。有什么好方法来保留以前的图纸,这样我就只需要在每次调用时在以前的图纸上绘制更改?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-27 03:33:20

我实现了一个SurfaceView。然后,在我创建自己的位图和画布,我画进入,绘制到屏幕上,我画位图到屏幕。

例如:

代码语言:javascript
复制
private Canvas myCanvas = null;
private Bitmap myCanvasBitmap = null;
private Matrix identityMatrix;

public mySurfaceCreated(canvasWidth, canvasHeight){
    myCanvasBitmap = Bitmap.createBitmap(canvasWidth, canvasHeight, Bitmap.Config.ARGB_8888);
    myCanvas = new Canvas();
    myCanvas.setBitmap(myCanvasBitmap);
    identityMatrix = new Matrix();
}

public void myDraw(Canvas canvas) {
    // Draw stuff onto myCanvas, NOT the canvas given by the android OS.
    drawStuff(myCanvas);
    // Draw onto the canvas given by the android OS.
    canvas.drawBitmap(myCanvasBitmap, identityMatrix, null);

}

这样,我不需要每次绘制整个画布,而是只需要进行所需的更改。请注意,操作系统创建的画布仍然每次都被完全重新绘制。

票数 0
EN

Stack Overflow用户

发布于 2013-12-16 06:17:31

有几个API可以为视图定义脏的rect以使其失效:

代码语言:javascript
复制
public void invalidate(Rect dirty)
public void invalidate(int l, int t, int r, int b)

然而,更有可能的情况是,View会一直被重新绘制,例如,当您滑动它时,或者在它上面的另一个View以Z顺序get的失效。

您可以尝试使用setDrawingCacheEnabled,如果您自己正在绘图,请确保缓存正在绘制的Bitmaps

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20604486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档