2017-12-06 11 views
0

Surfaceview를 사용하여 배경 이미지를 변경하고 있습니다. 하지만 holder.getSurface(). isValid()에 대해 false가 나옵니다. 왜 그런지 모르겠습니다. 비슷한 질문을 여기에서 보았지만 여전히 해결할 수 없었습니다. 뭔가 내가 당신은 표면 가용성에 대한 이벤트를 수신하기 위해 SurfaceViewCallback를 추가했다holder.getSurface(). isValid()가 false를 반환합니다.

감사

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); 
    } 
} 

} 

답변

0

을 시도해야하고에서 그리기 않습니다 거기에 내가 지금까지 무엇을했는지에없는 뭔가가 있나요, 또는이다 실. 당신이 SurfaceHolder에이 콜백을 설정하는 데 필요한 것보다

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 
    } 
} 

을 그리고 :

콜백 예는 다음과 같이됩니다

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

이 좀보십시오. 나는 그것이 당신을 도울 것이라고 생각한다