2012-02-12 77 views
0

我想用Surface View創建一個指南針,我發現下面的代碼...但我不知道下面的代碼試圖實現什麼想法?下面的代碼是什麼? Android Surface Surface查看

這是一個實施的方法。我認爲該方法應該被調用一次,並且線程永遠運行,除非onPause方法被調用...但是當我試圖運行下面的代碼時,Paint類只被調用一次,然後退出...更新的位置傳感器被忽視。請幫忙。

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

    this.runDrawingThread = true; 

    new Thread(new Runnable() 
    { 

     public void run() 
     {  
      long l1 = System.currentTimeMillis(); 
      long l2 = 0L; 
      int i = 0; 
      int j = 0; 
      long l3 = System.currentTimeMillis(); 

      if (!Painter.this.runDrawingThread){    
       return; 
      } 
      if (j < 2) 
      { 
       Painter.this.onPaint(l3, true); 
       j++; 
       if ((l3 - l2)/1000L < 1L)   
       l2 = l3; 
      } 

      for (i = 0; ;i++) 
      { 
       Log.i("test", "i value " + i); 
       while (true) 
       { 

       l1 += 16L; 
       l3 = l1 - l3; 
       if (l3 < 0L) 
        break; 
       try 
       { 
        Log.i("inside","inside the thread"); 
        Thread.sleep(l3); 
       } 
       catch (Exception localException) 
       { 

       } 
       } 

       Painter.this.onPaint(l3, false); 
       break; 
       }   


     } 
    }).start(); 
} 

回答

1

嗯...好奇....

對於初學者來說,我不知道這個畫家類是什麼。

if (j < 2)是奇怪,因爲我看不到任何會從0

其初始值改變「傳感器的位置被忽略。」這可能是因爲我沒有看到任何可以訪問手機傳感器的東西。

這段代碼是否曾經工作過?我建議你找一些其他的資源,像這也許:http://www.anddev.org/other-coding-problems-f5/android-compass-tutorial-t11674.html

UPDATE:for循環 一個沒有結束的條件,並簡單地在末端休息一下?那有什麼意義呢?

「線程永遠運行」不是我所看到的。您有while(true),但if (l3 < 0L)將爲真,因爲l3 = l1 - l3;將小於零,因爲l3應該比l1更高。它擊中了中斷,然後在for循環結束時擊中了中斷,從而退出了線程。

很難說你需要做什麼,因爲我真的不知道你要在這裏做什麼。

+0

上面的代碼只是一個代碼片段..哦耶..請從下面的鏈接檢查此代碼,併發送給我你的想法或什麼是缺乏(如果你有時間)在此先感謝... http:///scamexdotexe.x10.mx/ – scamexdotexe 2012-02-12 02:08:52