Lubenard
Lubenard

Reputation: 102

Why is my surfaceCreated never called

I'm a noobie in android dev and I'm having a issue. I'm trying to make a simple game using SurfaceView. But surfaceCreated is never called when I'm launching the app.

I'm using his answer to use less ram with the background Here is where the setcontentView is placed:

call_surfaceView = new class_surfaceView(cMainActivity);
// Setup your SurfaceView
SurfaceView surfaceView = call_surfaceView;  // use any SurfaceView you want
surfaceView.setZOrderOnTop(true);
surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);

// Setup your ImageView
ImageView bgImagePanel = new ImageView(cMainActivity);
bgImagePanel.setBackgroundResource(R.drawable.background); // use any Bitmap or BitmapDrawable you want

// Use a RelativeLayout to overlap both SurfaceView and ImageView
RelativeLayout.LayoutParams fillParentLayout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
RelativeLayout rootPanel = new RelativeLayout(cMainActivity);
rootPanel.setLayoutParams(fillParentLayout);
rootPanel.addView(bgImagePanel, fillParentLayout);
rootPanel.addView(surfaceView, fillParentLayout);
setContentView(rootPanel);

and here is my surfaceView code:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PorterDuff;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class class_surfaceView extends SurfaceView implements SurfaceHolder.Callback {
    Thread t;
    Canvas c;
    SurfaceHolder holder;
    Bitmap ghost;
    Bitmap lifebar;
    Bitmap player;
    Bitmap sol;
    Bitmap tombe;

    public class_surfaceView(Context context) {
        super(context);
        holder = getHolder();
        Log.d("Essai", "Class_surfaceView");
    }
    public void surfaceCreated(SurfaceHolder holder) {
        Log.d("Essai", "surfaceCreated");
        new Thread(new Runnable() {
            @Override
            public void run() {
               lauch_game();
            }
        }).start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    }

    public void lauch_game() {
        ghost = BitmapFactory.decodeResource(getResources(),R.drawable.ghost);
        c = holder.lockCanvas();
        if(c != null){
            c.drawColor(0, PorterDuff.Mode.CLEAR);
            c.drawBitmap(ghost,0,0,null);
            holder.unlockCanvasAndPost(c);
        } else {
            Log.d("DEBUG","c is null");
        }
        Log.d("Essai", "Essais de dessin");
    }
}

Thanks for helping !

Upvotes: 1

Views: 2126

Answers (2)

jojois74
jojois74

Reputation: 805

In your class_surfaceView constructor after holder = getHolder(), you must call holder.addCallback(this) to register the callback.

Upvotes: 8

Lucas
Lucas

Reputation: 58

Try to use @Override above method

Upvotes: 0

Related Questions