2011-06-02 212 views
0

這裏多視圖主要是我:安卓:在活動

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    LinearLayout layout = (LinearLayout) findViewById(R.id.mainView); 
    TextView text= (TextView) findViewById(R.id.text); 
    text.setText("This is a Test!"); 

    firstCircle first = new firstCircle(this); 
    secondCircle second = new secondCircle(this); 
    layout.addView(first); 
    layout.addView(second); 

} 

這裏是我的firstCircleClass:

public class firstCircle extends SurfaceView implements SurfaceHolder.Callback { 

private firstThread _firstThread; 
private secondThread _secondThread; 
private SurfaceHolder surfaceHolder; 


public firstCircle (Context context, AttributeSet attrs){ 
    super(context,attrs); 
    getHolder().addCallback(this); 
    setFocusable(true); 
    _firstThread= new firstThread(getHolder(),this); 

} 

public firstCircle (Context context){ 
    super(context); 
    getHolder().addCallback(this); 
    setFocusable(true); 
    _firstThread= new firstThread(getHolder(),this); 

} 

@Override 
public void onDraw(Canvas c){ 

    String tag="My Activity"; 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLUE); 

     c.drawCircle(100,100,100,paint); 

} 

@Override 
public void surfaceCreated(SurfaceHolder holder){ 
    _firstThread.setRunning(true); 
    _firstThread.start(); 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){ 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder){ 
    boolean retry = true; 
    _firstThread.setRunning(false); 
    while (retry){ 
     try{ 
      _firstThread.join(); 
      retry = false; 
     }catch (InterruptedException e){ 
      e.printStackTrace(); 
     } 
    } 
} 




} 

我有一個secondCircle類是完全相同如上更名並且該圓的顏色是紅色。

這裏是我firstThread類:

public class firstThread extends Thread { 

private SurfaceHolder _surfaceHolder; 
private firstClass _firstClass; 
private boolean _run = false; 

public firstThread (SurfaceHolder surfaceHolder, firstClass first){ 
    _surfaceHolder = surfaceHolder; 
    _firstClass= first; 

} 


public void setRunning (boolean run){ 
    _run = run; 
} 

@Override 
public void run(){ 

    while(_run){ 
     Canvas c=null; 
     try{ 
      c = _surfaceHolder.lockCanvas(null); 
      synchronized(_surfaceHolder){ 
        _firstThread.onDraw(c); 
      } 


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

} 

我有一個secondThread類是與上面不同的名稱和調用secondCircle的OnDraw()。

當我運行這個程序時,它只顯示藍色圓圈而不是紅色圓圈。爲什麼是這樣?

回答

1

當您添加視圖時,添加它們與佈局參數。第一個視圖可能會填充父視圖,而不會爲第二個視圖留出空間。

你可以做類似

LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    layout.addView(first,p); 
    layout.addView(second,p); 
+0

THX的輸入。我嘗試了以上,我仍然只能看到藍色的圓圈。任何其他想法?另外,如果我選擇註釋layout.addView(第一個),那麼紅圈出現 – 2011-06-02 20:09:14

+0

即使包裝也許內容仍然過大。嘗試使用新的LinearLayout.LayoutParams(50,50)而不是wrap_content將其設置爲測試。也是 - 父線性佈局 - 是垂直還是水平?它的設置是什麼 - 是否設置爲fill_parent? – jkhouw1 2011-06-02 20:19:07

+0

我試了它高達(500,500),它仍然無法正常工作。父線性佈局是垂直的,並設置爲fill_parent。你是否認爲一旦第一圈被繪製並且線程正在運行,它就會阻塞第二線程的運行? – 2011-06-02 20:23:15