2012-07-28 96 views
0

我正在嘗試創建一個小型打磚塊遊戲。ViewGroup的自定義子視圖不顯示。如何將自定義視圖添加到擴展ViewGroup的類中?

到目前爲止,我有一個MainActivity.java,BrickBreakerView.java和一個Paddle.java。 BrickBreakerView擴展了ViewGroup類,Paddle擴展了View類。我希望能夠在BrickBreakerView中添加Paddle,Bricks,Ball和Scoreboard(我將創建的自定義視圖類)。本質上,BrickBreakerView將控制這些視圖的交互。

MainActivity的xml佈局添加一個BrickBreakerView到佈局。 BrickBreakerView在onCreate方法中實例化一個Paddle,並且它還將該paddle添加爲子視圖(addView())。

我已經覆蓋了Paddle的onDraw方法來繪製一個給定X和Y位置的藍色矩形。但是,當我運行我的程序時,屏幕上沒有看到任何東西。我已經用Log.d測試過,檢查BrickBreakerView和Paddle的構造函數是否被調用。

感謝您的幫助!另外,我對Android開發很陌生,如果你們可以給我一些關於我的遊戲結構的評論,我會很感激:D!

下面是相關的代碼段。

這就是所謂的在我的主要活動:

setContentView(R.layout.main); 

我main.xml中的樣子: .BrickBreakerView

android:id="@+id/mainView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

的BrickBreakerView.java類:

public class BrickBreakerView extends ViewGroup{ 

public BrickBreakerView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setBackgroundColor(Color.GRAY); 
    Paddle paddle = new Paddle(context, 100, 400); 
    paddle.setYPosition(400); 
    addView(paddle); 
    Log.d("print", "Brick Breaker View constructor"); 
} 

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    // TODO Auto-generated method stub 
    Log.d("print", "onLayout called"); 
} 

}

的Paddle.java類:

public class Paddle extends View{ 

private int myX, myY; 

public Paddle(Context context, int xPos, int yPos) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    Log.d("print", "paddle constructor"); 
    myX = xPos; 
    myY = yPos; 
    invalidate(); 
} 
public void setXPosition(int x) { 
    myX = x; 
    invalidate(); 
} 
public void setYPosition(int y) { 
    myY = y; 
    invalidate(); 
} 
@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 

    Log.d("print", "onDraw called"); 
    super.onDraw(canvas); 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLUE); 
    canvas.drawRect(myX, myY, myX+100, myY+50, paint); 
} 

}

回答

0

使槳實例磚斷路器視圖的成員變種 創建並將其添加到視圖組 - 您正在這樣做。 在onLayout中,將paddle.layout(0,0,100,100)

相關問題