2012-07-28 134 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)