繁体   English   中英

holder.getSurface()。isValid()返回false

[英]holder.getSurface().isValid() is returning false

我正在使用Surfaceview更改背景图像。 但是我在holder.getSurface()。isValid()上弄错了,我也不知道为什么。 我在这里查看了一些类似的问题,但仍然无法解决。 到目前为止,我所做的工作是否缺少某些内容,还是应该尝试其他内容?

谢谢

import android.content.Context;

import android.graphics.BitmapFactory;
import android.graphics.Canvas;

import android.view.SurfaceHolder;
import android.view.SurfaceView;


public class BrickSmasherView extends SurfaceView {



    SurfaceHolder holder;




    Canvas canvas;
    Context context;

    Thread back = null;

    volatile boolean running = false;

    public BrickSmasherView(Context context) {
        super(context);
        this.context = context;
        holder = getHolder();

    }
    public void runbackThread(){
        back = new Thread(new Runnable() {
            @Override
            public void run() {
                while (running){
                    draw();
                }
            }
        });
        back.start();
    }




    public  void resumegame(){
        running = true;
       runbackThread();

    }

    public void pausegame(){

        running = false;
        try
        {
            back.join();


        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

public void  draw(){
    if(holder.getSurface().isValid()){
        canvas = holder.lockCanvas();
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.sky),0,0,null);
        holder.unlockCanvasAndPost(canvas);
    }
}

}

您必须在SurfaceView添加Callback以接收有关Surface可用性的事件并从线程进行绘制。

回调示例将如下所示:

public class MyCallback implements SurfaceHolder.Callback {
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, 
        int width, int height) {    
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // you need to start your drawing thread here
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {  
        // and here you need to stop it
    }
}

而且,您需要将此回调设置为SurfaceHolder:

surface.getHolder().addCallback(new MyCallback());

请尝试这个。 我认为它将为您提供帮助

暂无
暂无

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

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