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()。
當我運行這個程序時,它只顯示藍色圓圈而不是紅色圓圈。爲什麼是這樣?
THX的輸入。我嘗試了以上,我仍然只能看到藍色的圓圈。任何其他想法?另外,如果我選擇註釋layout.addView(第一個),那麼紅圈出現 – 2011-06-02 20:09:14
即使包裝也許內容仍然過大。嘗試使用新的LinearLayout.LayoutParams(50,50)而不是wrap_content將其設置爲測試。也是 - 父線性佈局 - 是垂直還是水平?它的設置是什麼 - 是否設置爲fill_parent? – jkhouw1 2011-06-02 20:19:07
我試了它高達(500,500),它仍然無法正常工作。父線性佈局是垂直的,並設置爲fill_parent。你是否認爲一旦第一圈被繪製並且線程正在運行,它就會阻塞第二線程的運行? – 2011-06-02 20:23:15