2011-06-02 101 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