Hallo,
ich habe eine MainActivity mit einem IntroView (Logo wird eingeblendet und der View verschwindet langsam), einem Level1View und einem Level2View. Diese Views beinhaltet Bitmaps welche in der OnDraw gemalt werden und in der OnTouchEvent nach Berührungen kontrolliert werden. Level1View und Level2View sind public static, damit andere Klassen darauf zugreifen können (eine andere Idee hatte Ich nicht). Nachdem der IntroView transparent ist (getAlpha = 0), wird MainActivity.layout.removeView(this) im IntroView aufgerufen. Das funktioniert auch super. Wenn ich aber (MainActivity.layout.removeView(this) in dem Level1View verwende bekomme Ich einen Nullpointer, dass Level1View nicht deklariert wurde, das ist aber falsch, da ich in der onCreate den Konstruktiv jeweils aufrufe. Ich blicke da gerade nicht ganz durch, ich hatte auch schon öfters Probleme mit removeView daher bin ich sehr frustriert.
Ich verwende eine RelativeLayout.
Hoffentlich erkennt ihr in der MainActivity oder so einen Fehler
Hier der Code der MainActivity:
package catgames.lineland;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.RelativeLayout;
import catgames.framework.Music;
import catgames.views.HudView;
import catgames.views.IntroView;
import catgames.views.Level1;
import catgames.views.Level2;
public class MainActivity extends Activity {
// Layout
public static RelativeLayout layout;
// Views
IntroView introview;
public static HudView hudview;
// Level
public static Level1 level1;
public static Level2 level2;
// Music
public static Music music;
// Context
public static Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Context
context = this;
// Layout
layout = new RelativeLayout(this);
layout.setBackgroundResource(R.drawable.backdrop);
setContentView(layout);
// Views
introview = new IntroView();
layout.addView(introview);
// Level
level1 = new Level1();
level2 = new Level2();
// Music
music = new Music(R.raw.music);
music.setLooping(true);
music.play();
}
}
Hier der Code des IntroViews:
package catgames.views;
import android.graphics.Canvas;
import android.view.View;
import catgames.framework.Image;
import catgames.lineland.MainActivity;
import catgames.lineland.R;
import catgames.lineland.Settings;
public class IntroView extends View {
// Files
Image logo;
// Firsttime
boolean firsttime;
// Timer
int timer;
/* CONSTRUCTOR */
public IntroView() {
super(MainActivity.context);
// Loading
logo = new Image(R.drawable.introscreen_horizontal);
// Vars
firsttime = true;
timer = 0;
}
/* DRAW */
public void onDraw(Canvas c) {
// Firsttime
if (firsttime) {
// Update Settings
Settings.screenwidth = c.getWidth();
Settings.screenheight = c.getHeight();
// Scaling
logo.scaleFullscreen();
// Loading
MainActivity.hudview = new HudView();
MainActivity.level1.load();
MainActivity.level2.load();
MainActivity.level2.setX(c.getWidth());
MainActivity.layout.addView(MainActivity.level1);
MainActivity.layout.addView(MainActivity.level2);
MainActivity.layout.addView(MainActivity.hudview);
this.bringToFront();
// Firsttime Update
firsttime = false;
}
// Timer
if (timer > 60) {
// Change View
this.setAlpha((float) (this.getAlpha() - 0.05));
if (this.getAlpha() == 0) {
MainActivity.layout.removeView(this);
}
} else {
// Timer Update
timer ++;
}
// Draw
logo.draw(c);
// Repeat
invalidate();
}
}
Alles anzeigen