Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何组合多个视图,并在android画布上绘制它们_Java_Android_Android Layout - Fatal编程技术网

Java 如何组合多个视图,并在android画布上绘制它们

Java 如何组合多个视图,并在android画布上绘制它们,java,android,android-layout,Java,Android,Android Layout,首先,这是我在安卓编程的第一周,我正在尝试概念化游戏是如何构建的。我有一个设置,在那里我画了几个视图,我只是想知道如何将所有视图放在一起,每个视图都放在它的线程中,但它们都可以以这种方式交互 MainActivity:在加载时闪屏并调用GameMenUAActivity 游戏菜单活动:调用GamveMenuView 游戏菜单视图:跟踪分数/姓名/并启动静止活动 静态活动:调用StationViewsManager StationViewsManager:希望成为我绘制所有对象并将它们放在一起的类

首先,这是我在安卓编程的第一周,我正在尝试概念化游戏是如何构建的。我有一个设置,在那里我画了几个视图,我只是想知道如何将所有视图放在一起,每个视图都放在它的线程中,但它们都可以以这种方式交互

MainActivity:在加载时闪屏并调用GameMenUAActivity

游戏菜单活动:调用GamveMenuView

游戏菜单视图:跟踪分数/姓名/并启动静止活动

静态活动:调用StationViewsManager

StationViewsManager:希望成为我绘制所有对象并将它们放在一起的类

/*
gameView = new GameBackgroundView(this);
movingMeteors = new MovingMeteors(this);
movingSpaceShip = new movingSpaceShip(this);
gameView.setClickable(true);
gameView.setFocusable(true);

gameView.addView(movingMeteors);
gameView.addView(movingSpaceShip);
setContentView(gameView);
this is where I'm not sure how to combine the views and draw them. Perhaps i'm not taking the problem from a right angle. any help will be appreciated 
*/
GameThreadManager:设置StationView类型的线程 下面是一个快速片段,在其实例化GameThreadManager(StationViews视图)上,它接受视图,可以通过下面的方法运行

@SuppressLint("WrongCall")
@Override
public void run() {
      long ticksPS = 1000 / FPS;
      long startTime;
      long sleepTime;
      while (running) {
             Canvas c = null;
             startTime = System.currentTimeMillis();
             try {
                    c = view.getHolder().lockCanvas();
                    synchronized (view.getHolder()) {
                           view.onDraw(c);
                    }
             } finally {
                    if (c != null) {
                           view.getHolder().unlockCanvasAndPost(c);
                    }
             }
             sleepTime = ticksPS-(System.currentTimeMillis() - startTime);
             try {
                    if (sleepTime > 0)
                           sleep(sleepTime);
                    else
                           sleep(10);
             } catch (Exception e) {}
      }
}
站点视图:视图超类,绘制透明背景,以处理其他视图

站长:流星雨

站背景:旋转背景


StationDefender:静态,屏幕左侧并发射子弹

如果您想显示彼此的各种视图,则需要一个布局来添加它们。基本上,您可以创建一个
RelativeLayout
并使用
setContentView()
将其设置为内容视图,并使用它的
addView()
方法将所有视图添加到相对布局中

// try this way,hope this will help you...

gameView = new GameBackgroundView(this);
movingMeteors = new MovingMeteors(this);
movingSpaceShip = new movingSpaceShip(this);
gameView.setClickable(true);
gameView.setFocusable(true);

gameView.addView(movingMeteors);
gameView.addView(movingSpaceShip);
setContentView(gameView);

顺便问一下,为什么要使用视图?我是说你已经用SurfaceView做背景了。你也可以在上面画米特洛伊和宇宙飞船。这样性能会更好。

addView将不起作用,因为我的视图是SurfaceView实际上我并不想创建不同的视图,我这样做是因为我想将meteorites代码与滚动背景分开。