简体   繁体   English

为什么我的surfaceCreated从未调用过

[英]Why is my surfaceCreated never called

I'm a noobie in android dev and I'm having a issue. 我是android开发人员中的菜鸟,遇到了问题。 I'm trying to make a simple game using SurfaceView. 我正在尝试使用SurfaceView做一个简单的游戏。 But surfaceCreated is never called when I'm launching the app. 但是,当我启动应用程序时,从未调用surfaceCreated。

I'm using his answer to use less ram with the background Here is where the setcontentView is placed: 我正在用他的答案在背景中使用较少的ram 这是setcontentView的放置位置:

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: 这是我的surfaceView代码:

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 ! 感谢您的帮助!

在holder = getHolder()之后的class_surfaceView构造函数中,必须调用holder.addCallback(this)来注册回调。

尝试使用上述方法@Override

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM