gpt4 book ai didi

android - 在整个 while 循环结束之前, Canvas 不会更新(无效)

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:58 27 4
gpt4 key购买 nike

我想在 Canvas 上移动一个球。 a和b类似于x,y坐标位置。我的代码以任何方式尝试动态获取不同的值。 a,b 是全局变量。但似乎“invalidate()”或屏幕刷新只发生在整个循环结束之后。你知道为什么吗?。如果我必须在另一个线程上构建它,请给我一些简单的代码建议。

private void shootBall(){
while (a>b){
a = getPositionX();
b = getPositionY();
invalidate();
}
}
}

最佳答案

我认为更正确的说法是您可以在一个循环中调用 invalidate(),但是在您的循环完成之前不会处理该失效(不会重绘 Canvas )。问题是您在调用 onDraw() 方法的同一线程(UI 工具包线程)上调用 invalidate。因此,除非/直到您将控制权交还给工具包,否则它不可能进行渲染。因此,您的 invalidate() 调用确实会使 View 无效……但是在循环完成并且函数返回之前,不会重新绘制 View 。

更正确的做法是更改通过某个计时器调用的某些函数的位置(这实际上是动画类所做的)。在该函数中,您将更改值、适本地使 () 无效,然后返回。然后工具包重新渲染场景,您的函数将获得 future 的回调并相应地更新位置。

关于android - 在整个 while 循环结束之前, Canvas 不会更新(无效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902470/

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