繁体   English   中英

为什么我的surfaceCreated从未调用过

[英]Why is my surfaceCreated never called

我是android开发人员中的菜鸟,遇到了问题。 我正在尝试使用SurfaceView做一个简单的游戏。 但是,当我启动应用程序时,从未调用surfaceCreated。

我正在用他的答案在背景中使用较少的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);

这是我的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");
    }
}

感谢您的帮助!

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

尝试使用上述方法@Override

暂无
暂无

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

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