有2个SetContentViews

时间:2013-04-23 18:22:46

标签: java android

我正在开发一款小游戏。但是,我希望我的activity拥有XML的内容视图,但也希望它显示我稍后创建的视图。

这是我的代码:

public class GameView extends Activity{
MediaPlayer backgroundMusic;
TextView mTextField;
int Px = 0;
int Py = 0;
Point size = new Point();
Display display;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //setContentView(new myView(this));
    setContentView(R.layout.gameviewlayout);
    mTextField = (TextView)findViewById(R.id.timer1);       
        new CountDownTimer(45000, 1000) {

            public void onTick(long millisUntilFinished) {
                mTextField.setText("Seconds Remaining: " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                mTextField.setText("done!");
            }
         }.start();
    display = getWindowManager().getDefaultDisplay();
    display.getSize(size);
    int width = size.x;
    int height = size.y;
    backgroundMusic = MediaPlayer.create(GameView.this, R.raw.gallery_music);
    backgroundMusic.start();

}
@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    backgroundMusic.release();

}

private class myView extends View{
    public myView(Context context) {
    super(context);

     }

    @SuppressLint("DrawAllocation")
    @Override
     protected void onDraw(Canvas canvas) {
      // TODO Auto-generated method stub
            Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.lil_peanut);
            canvas.drawBitmap(Bitmap.createScaledBitmap(bm, 83, 131, false), Px, Py, null);
        }
    }
}

所以我想要setContentView(new myView(this));SetContentView(R.layout.gameviewlayout); 我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

这个问题经常被问到(可能会有愚蠢)。看看this的开始 - 这基本上就是你想要的。

与更重要的事情一样,有很多方法可以做到这一点。我的首选方式是:

1。)在布局文件ID中提供根视图。这是不必要的,请参阅here,但SDK旨在鼓励您尽可能使用findViewById,并且它(理论上)应该更快。

2.。)您的根视图应该是ViewGroups的实例,特殊情况除外。

3。)一旦你有了对视图的引用,就可以使用documentation中详述的addView - 这会将视图作为“子”添加到你的布局中得到了。

4.。)Android使用LayoutParameters来衡量和绘制视图。因此,您需要在新视图中设置xxxLayout.LayoutParams(...),对我来说最好的设计是在添加时进行设置。但要注意!添加到布局的视图需要具有正确的布局参数 - 将“xxx”替换为“Linear”或“Relative”。但是,如果您要将LinearLayout添加到RelativeLayout,则要设置相对布局参数 - 因为测量人员确实需要了解每个视图的“访问次数” “与上面的容器有关。请记住,如果您使用import而不是更多“合格的类名”,则应导入。两个人混在一起让我不时地和我一起玩这个游戏。

可悲的是,这个奇妙的问题将是一个愚蠢的问题,所以我们应该关闭它。