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