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