理解Canvas.onDraw()的概念有什么问题?

时间:2011-09-03 07:47:50

标签: android loops canvas ondraw

我编写了以下简单代码来查看渲染的行为。在这段代码中,我正在改变屏幕的颜色。

我无法理解的是,为什么这段代码会永远运行?我没有使用无限循环,但这段代码将永远运行!

请告诉我原因。感谢

package kamalan.com.androidbasicstarter;

import java.util.Random;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class RenderViewTest extends Activity{

    class RenderView extends View{
        Random rand = new Random();

        public RenderView(Context context) {
            super(context);
        }

        protected void onDraw(Canvas canvas){
            canvas.drawRGB(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
            invalidate();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(new RenderView(this));
    }
}

1 个答案:

答案 0 :(得分:0)

invalidate会导致重绘。通常(总是?)从onDraw调用它是一个坏主意,因为它会立即再次调用onDraw。这就是你所看到的。