2013-03-21 27 views
0

我只用了幾個星期的java,我不知道發生了什麼。Android中的線程。不知道該怎麼做。超困惑

我正在製作一個畫布,我從一個tutoral複製粘貼了這段代碼,但它有一堆錯誤,我肯定只會發生這種錯誤,因爲我不知道如何實際設置代碼。本教程適用於已經知道如何進行線程處理的人員,而且我迷路了。我不知道如何解決這些錯誤。

即:

postInvalidate()「心不是一個方法」或什麼的,即使它是一個內置的Android功能...同樣與setWillNotDraw和其他的。

我超級困惑,我不知道如何解決這些錯誤。

package com.example.routedrawingtest; 

import android.graphics.Canvas; 
import android.view.SurfaceHolder; 


class PanelThread extends Thread { 
     private SurfaceHolder _surfaceHolder; 
     private DrawingPanel _panel; 
     private boolean _run = false; 


     public PanelThread(SurfaceHolder surfaceHolder, DrawingPanel panel) { 
      _surfaceHolder = surfaceHolder; 
      _panel = panel; 
     } 


     public void setRunning(boolean run) { //Allow us to stop the thread 
      _run = run; 


     } 
     @Override 
     public void run() { 
      Canvas c; 
      while (_run) {  //When setRunning(false) occurs, _run is 
       c = null;  //set to false and loop ends, stopping thread 


       try { 


        c = _surfaceHolder.lockCanvas(null); 
        synchronized (_surfaceHolder) { 

         postInvalidate(); 
       } 
} finally { 
        if (c != null) { 
         _surfaceHolder.unlockCanvasAndPost(c); 
        } 
       } 
     } 
     } 




public void surfaceCreated(SurfaceHolder holder) { 


setWillNotDraw(false); //Allows us to use invalidate() to call onDraw() 


_thread = new PanelThread(getHolder(), this); //Start the thread that 
    _thread.setRunning(true);      //will make calls to 
    _thread.start();        //onDraw() 
} 



public void surfaceDestroyed(SurfaceHolder holder) { 
try { 
    _thread.setRunning(false);    //Tells thread to stop 
_thread.join();       //Removes thread from mem. 
} catch (InterruptedException e) {} 
} 
+0

上面的代碼並不好,特別是設置布爾變量運行需要以某種記憶障礙的進行,以確保能見度。使變量易變是最簡單的方法。 – brain 2013-03-21 11:11:43

回答

0

postInvalidate()和setWillNotDraw()適用於普通View和基於ViewGroup的圖形。您的代碼正在繪製到Surface。這些圖形方法不能以這種方式混合和匹配。

如果你是新人,不知道你在做什麼,我建議你扔掉所有的表面的東西。瞭解如何基於Views和ViewGroups設計佈局併爲其編寫代碼。它也不需要任何線程。

從這裏開始:http://developer.android.com/training/basics/firstapp/index.html

+0

謝謝!儘管我從字面上不知道該怎麼做。我該如何改變它? – user2175569 2013-03-21 02:58:02

+0

試試我上面鏈接的「我的第一個應用」指南。 – 2013-03-21 03:00:36

+0

唯一的問題是,這是一個項目,它是必需的。 而我沒有時間回到第一廣場,因爲明天就要完成了! >< – user2175569 2013-03-21 03:03:11