在整个 while 循环结束之前,画布不会更新(无效)

2023-12-23

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

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

我认为更正确的说法是,您可以在循环内调用 invalidate() ,但直到循环完成后才会处理无效(画布不会重新绘制)。问题是您在与调用 onDraw() 方法的线程(UI 工具包线程)相同的线程上调用 invalidate。因此,除非/直到您将控制权交还给工具包,否则它不可能进行渲染。因此,您的 invalidate() 调用实际上使视图无效......但在循环完成并且函数返回之前,视图不会被重绘。

更改通过某个计时器调用的某个函数中的位置更为正确(这本质上是动画类所做的)。在该函数中,您可以更改值,适当地 invalidate(),然后返回。然后工具包重新渲染场景,您的函数将获得未来的回调并相应地更新位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在整个 while 循环结束之前,画布不会更新(无效) 的相关文章

随机推荐