2013-03-23 71 views
1

我有包含游戏hang子手的应用程序。我已经为他们的绘画责任制定了一项单独的活动。下面的代码:Android:切换和更新布局

public class DrawWisielec extends View 
{ 
    Paint paint; 
    int choose; 
    public DrawWisielec(Context context,int choose) 
    { 
     super(context); 
     this.choose = choose; 
    } 

    protected void onDraw(Canvas canvas) 
    { 
     canvas.drawRGB(0,0,0); 
     Paint Circle = new Paint(); 
     Paint paint = new Paint(); 
     Circle.setARGB(255,255,255,255); 
     Circle.setStyle(Paint.Style.STROKE); 
     Circle.setStrokeWidth(5); 
     paint.setARGB(255, 255, 255, 255); 
     paint.setStrokeWidth(5); 
     switch(choose) 
     { 
     case 1: 
      { 
       canvas.drawLine(50, 400, 100, 300, paint); 
       break; 
      } 
     case 2: 
      { 
      canvas.drawLine(100, 300, 150, 400, paint); 
      break; 
      } 
     case 3: canvas.drawLine(100, 300, 100, 50, paint); 
     case 4:canvas.drawLine(100,50,300,50,paint); 
     case 5:canvas.drawLine(300,50,300,100,paint); 
     case 6:canvas.drawCircle(300, 150, 50, Circle); 
     case 7:canvas.drawLine(300, 200, 300, 250, paint); 
     case 8:canvas.drawLine(300, 250, 250, 200, paint); 
     case 9:canvas.drawLine(300, 250, 350, 200, paint); 
     case 10:canvas.drawLine(300, 250, 275, 330, paint); 
     case 11:canvas.drawLine(300, 250, 325, 330, paint); 
     } 
     invalidate(); 
    } 

如何从另一个活动图纸的各个阶段,该阶段的代码如下之间切换:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game_mode_wisielec); 

    DrawLayout = (LinearLayout)findViewById(R.id.WisielecDrawLayout); 
    DrawWisielec draw = new DrawWisielec(this, choose); 
    DrawLayout.addView(draw); 

回答

2

,你应该调用无效()方法,在你的DrawWisielec观点:

draw.setChoose(2); // Change stage of drawing to for example 2 
draw.invalidate(); // Redraw view 

根据Android文档:

public void invalidate()在API级别1中添加

使整个视图无效。如果视图可见, onDraw(android.graphics.Canvas)将在 未来的某个时间点被调用。这必须从UI线程调用。要从非UI 线程调用,请调用postInvalidate()。

它会再次调用您感兴趣的onDraw()方法。请注意,这必须从UI线程中调用。

+0

我使用这种方法,但我有例外,这是我的代码:这是我发射你写的东西的方法。 draw.setChoose(选择)返回异常。 这是我的方法drawChoose: \t公共无效setChoose(INT X) \t { \t \t this.choose = X; \t} – 2013-03-23 08:54:25

+0

你会得到什么例外? – 2013-03-23 08:56:34

+0

ThreadException,我是否需要调用invalidate并设置选择线程?对不起,我的英语很少。 – 2013-03-23 09:19:41