2012-03-23 45 views
1

一直在寻找一些教程绘制使用SurfaceView帆布,但显示出来的仅仅是一个黑色的背景。SurfaceView实现Runnable - 线程没有启动

public class FighterActivity extends Activity implements OnTouchListener { 
    /** Called when the activity is first created. */ 
    SurfaceController surface; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     surface = new SurfaceController(this); 
     surface.setOnTouchListener(this); 
     setContentView(surface); 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     surface.pause(); 
    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     surface.resume(); 
    } 

    public class SurfaceController extends SurfaceView implements Runnable{ 

     Thread thread = null; 
     SurfaceHolder holder; 

     public SurfaceController(Context context) { 
      super(context); 
      // TODO Auto-generated constructor stub 
      holder = getHolder(); 
      System.out.println("HERE"); 
     } 

     public void run() { 
      // TODO Auto-generated method stub 
      System.out.println("Hello World2"); 
      while(true){ 
       if(!holder.getSurface().isValid()){ 
        System.out.println("NOT VALID"); 
        continue; 
       } 
       System.out.println("VALID!"); 
       Canvas can = holder.lockCanvas(); 
       can.drawARGB(255, 150, 150, 0); 
       holder.unlockCanvasAndPost(can); 
      } 
     } 

     public void pause(){ 

     } 

     public void resume(){ 

     } 

    } 

    public boolean onTouch(View view, MotionEvent me) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

它得到System.out.println(“HERE”);这里打印出来,但仅此而已happends,换句话说线程不上手,因为“你好World2”不能打印,是什么问题?

感谢所有帮助

+0

你没有显示你是如何使用*它的。通过它的声音,我们在调用构造函数,但是然后呢? – 2012-03-23 08:10:31

+0

添加的代码现在 – Araw 2012-03-23 08:17:19

回答

3

我假设你正在构建关闭的这一点:http://android-coding.blogspot.ca/2011/05/drawing-on-surfaceview.html

你(分别为resumepauseSurfaceController)注意到那里的onResumeMySurfaceViewonPauseMySurfaceView启动实际的线程。您也需要在代码中执行此操作,例如在SurfaceController

protected boolean running = false; 

public void resume() { 
    running = true; 
    thread = new Thread(this); 
    thread.start(); 
} 
+0

啊哈,当然,这就是它!非常感谢! :d – Araw 2012-03-23 08:31:03