surfaceview 이거 책에서 나와있는데로 했는데도 오류가 나와서 질문드립니다.

GameView

  1. package com.framwork; 
  2. import android.content.Context; 
  3. import android.view.SurfaceHolder; 
  4. import android.view.SurfaceView; 
  5. public class GameView extends SurfaceView implements SurfaceHolder.Callback{ 
  6.    private GameViewThread m_thread; 
  7.    public GameView(Context context) { 
  8.       super(context); 
  9.       getHolder( ).addCallback(this); 
  10.       m_thread=new GameViewThread(getHolder( ),this); 
  11.    } 
  12.    @Override 
  13.    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
  14.    } 
  15.    @Override 
  16.    public void surfaceCreated(SurfaceHolder arg0){ 
  17.       //스레드를 실행상태로 만듭니다 
  18.       m_thread.setRunning(true); 
  19.       //스레드 실행 
  20.       m_thread.start(); 
  21.    } 
  22.    @Override 
  23.    public void surfaceDestroyed(SurfaceHolder arg0){ 
  24.       boolean retry = true; 
  25.       m_thread.setRunning(false); 
  26.       while(retry){ 
  27.          try{ 
  28.             //스레드 중지 
  29.             m_thread.join(); 
  30.             retry= false; 
  31.             }catch(InterruptedException e){ 
  32.             //스레드가 중지되도록 계속 시도 
  33.          } 
  34.       } 
  35.    }  
  36. } 

 

GameViewThread (오류1)

  1. package com.framwork; 
  2. import android.graphics.Canvas; 
  3. import android.view.SurfaceHolder; 
  4. import android.view.View; 
  5. public class GameViewThread extends Thread{ 
  6.    //접근을 위한 멤버변수 
  7.    private SurfaceHolder m_surfaceHolder; 
  8.    private GameView m_gameview; 
  9.    private boolean m_run = false; 
  10.    public GameViewThread(SurfaceHolder surfaceHolder, GameView gameview) { 
  11.       m_surfaceHolder = surfaceHolder; 
  12.       m_gameview = gameview; 
  13.    } 
  14.    public void setRunning(boolean run){ 
  15.       m_run = run; 
  16.    } 
  17.    @Override 
  18.    public void run( ) { 
  19.       Canvas _canvas; 
  20.       while(m_run){ 
  21.          _canvas = null; 
  22.          try{ 
  23.             //SurfaceHolder를 통해 Suface에 접근해서 가져옴 
  24.             _canvas = m_surfaceHolder.lockCanvas(null); 
  25.             synchronized(m_surfaceHolder){ 
  26.                m_gameview.onDraw(_canvas); // 오류 View유형에서 메소드(Canvas)가 가시적이지 않습니다 
  27.             } 
  28.             }finally{ 
  29.             if(_canvas != null) 
  30.             //suface를 화면에 표시 
  31.             m_surfaceHolder.unlockCanvasAndPost(_canvas); 
  32.          } 
  33.       } 
  34.    } 
  35. } 

 

GameViewActivity

  1. package com.framwork; 
  2. import android.os.Bundle; 
  3. import android.app.Activity; 
  4. import android.view.Menu; 
  5. public class GameActivity extends Activity { 
  6.    @Override 
  7.    protected void onCreate(Bundle savedInstanceState) { 
  8.       super.onCreate(savedInstanceState); 
  9.       setContentView(new GameView(this)); 
  10.    } 
  11.    @Override 
  12.    public boolean onCreateOptionsMenu(Menu menu) { 
  13.       // Inflate the menu; this adds items to the action bar if it is present. 
  14.       getMenuInflater().inflate(R.menu.activity_game, menu); 
  15.       return true; 
  16.    } 
  17. } 

오류 내용

View유형에서 메소드(Canvas)가 가시적이지 않습니다