gpt4 book ai didi

java - onDraw() 中未更新的秒数

转载 作者:行者123 更新时间:2023-12-01 15:19:16 27 4
gpt4 key购买 nike

我有一个简单的图形应用程序,可以在屏幕上绘制一些内容。之前,我在 onDraw() 中调用 invalidate() 时没有进行检查,没有任何问题。在我的应用程序中, onDraw() 每秒被调用多次(我通过日志了解到这一点),但我不想每秒调用它多次,因为我想更新屏幕仅在每一秒之后。所以我尝试比较前一秒和当前秒——如果它们相同,我就不会调用 invalidate();如果第二个发生变化,我将调用 invalidate()。这是我的代码:

protected void onDraw(Canvas canvas) {         
// Create date to check current second
Date date = new Date();
canvas.drawColor(Color.WHITE);

drawArcs(canvas, mBigOval, mUseCenters[0], mPaints[0]);

//Get the current second
curSec = date.getSeconds();
//compare if its same as lastSec which is updated in drawArcs() which i called before

do {
Log.d("Graphics","curSec="+curSec+" lastSec="+lastSec);
curSec = date.getSeconds();
} while(curSec == lastSec);

Log.d("Graphics","Calling invalidate() and count="+(++count));
invalidate();
}

使用上面的代码,如果我的应用程序在第 30 秒启动,则日志显示:

     06-25 10:25:52.257: D/Graphics(14711): curSec=30  lastSec=30

上述日志不断重复,curSec 和 lastSec 没有变化。为什么第二个不更新,即使我每次循环都更新它。

最佳答案

您的 Date 对象已创建,并设置为您实例化它时的当前时间:

Date date = new Date();

每次调用 date.getSeconds() 时,您只是获取同一个 Date 对象上的秒数,而该对象的时间并未改变。

也就是说,您真正的问题是您从 onDraw() 调用 invalidate(),从而强制再次调用 onDraw() > (这迫使另一个......)。你不需要这样做;每当 View 变得无效时,onDraw() 就会被调用。如果您尝试制作动画(以 1 fps?),您可以使用具有 postDelayed() 的处理程序或 SurfaceView 和另一个线程。

关于java - onDraw() 中未更新的秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183708/

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