我有一个简单的图形应用程序,可以在屏幕上绘制一些东西。invalidate()
以前,当我在onDraw()
没有支票的情况下打电话时,我没有任何问题。在我的应用程序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 没有变化。为什么即使我每次循环通过时都更新它,第二个也不更新。