2011-09-03 107 views
0

我写了下面的简单代码来查看渲染的行为。在这段代码中,我正在改变屏幕的颜色。了解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)); 
    } 
} 

回答

0

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