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:
Quellcode
- 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();
- }
- }
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von CatGames ()