2

我正在做一个小游戏。但是我希望我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); 我该如何做到这一点?

4

1 回答 1

0

这个问题经常被问到(可能会有骗子)。首先看看这个——这基本上就是你想要的。

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

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

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

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

4.) Android 用于LayoutParameters测量和绘制视图。所以你需要设置xxxLayout.LayoutParams(...)你的新视图,对我来说最好的设计是在你添加它的时候做。但请注意!添加到布局的视图需要具有正确的布局参数 - 将 xxx 替换为“线性”或“相对”。但是,如果您将 a 添加LinearLayoutRelativeLayout要设置相对布局参数的 a 中,因为测量器确实需要知道它“访问”的每个视图与上面的容器之间的关系。请记住,如果您使用import而不是更多“合格的类名”,则应该导入正确的类名。时不时地与两者混为一谈,我玩这个游戏已经有一段时间了。

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

于 2013-04-23T18:50:58.110 回答