2013-03-23 47 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