Reputation: 102
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
Reputation: 805
In your class_surfaceView constructor after holder = getHolder(), you must call holder.addCallback(this) to register the callback.
Upvotes: 8