2017-12-06 18 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

を試してみてくださいスレッド。

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にこのコールバックを設定する必要がありますより:

Aコールバックの例は次のようになります

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

はこれをしてください試してみてください。私はそれがあなたを助けると思う

関連する問題