gpt4 book ai didi

android.graphics.View invalidate(int, int, int, int) Canvas 的一部分,但是 onRedraw() 整个 Canvas ?

转载 作者:行者123 更新时间:2023-11-29 15:14:24 26 4
gpt4 key购买 nike

Android View 具有三个版本的 invalidate():一个使整个 View 无效,两个仅使一部分无效。但是它只有一个onDraw(),它绘制了整个 Canvas 。系统提示我只想使 View 的一部分无效,但我不清楚它是什么,这一定有一些用处。

我有一个在 onDraw() 中进行自定义绘图的 View 。我是否有办法找出 Canvas 的哪些部分无效,以便我只绘制那些部分?

最佳答案

当 Android 准备好呈现对屏幕的更改时,它会通过创建屏幕上所有需要重绘的单个矩形区域(所有已失效的区域)的联合来实现。

当您的 View 的 onDraw(Canvas canvas) 方法被调用时,您可以检查 Canvas 是否有裁剪边界。

如果有一个非空的剪辑边界,您可以使用此信息来确定您将和不需要绘制的内容,从而节省时间。

如果剪辑边界为空,您应该假设 Android 希望您绘制 View 的整个区域。

像这样:

private Rect clipBounds = new Rect();

@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);

boolean isClipped = canvas.getClipBounds(clipBounds);

// If isClipped == false, assume you have to draw everything
// If isClipped == true, check to see if the thing you are going to draw is within clipBounds, else don't draw it
}

关于android.graphics.View invalidate(int, int, int, int) Canvas 的一部分,但是 onRedraw() 整个 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050066/

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