2014-04-11 2 views
1

사용자가 화면에 닿는 곳에 그림을 그려야하는 예를 만들고 싶습니다."onTouch"방법으로 이미지가 표시되지 않습니다.

캔버스를 사용했지만 화면이 항상 공백으로 표시됩니다. 아래는 내 코드입니다 :

public class MainActivity extends Activity implements OnTouchListener { 

    MySurfaceView mySurfaceView; 
    float x, y; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mySurfaceView = new MySurfaceView(MainActivity.this); 
     mySurfaceView.setOnTouchListener(this); 
     x = 0; 
     y = 0; 
     setContentView(mySurfaceView); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 
     x = event.getX(); 
     y = event.getY(); 
     return false; 
    } 

    @Override 
    protected void onResume() { 
     mySurfaceView.resume(); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     mySurfaceView.pause(); 
     super.onPause(); 
    } 

    class MySurfaceView extends SurfaceView implements Runnable { 

     SurfaceHolder mSurfaceHolder; 
     Thread mThread; 
     boolean isRunning = true; 

     public MySurfaceView(Context context) { 
      super(context); 
      mSurfaceHolder = getHolder(); 
     } 

     @Override 
     public void run() { 
      while (isRunning) { 
       if (!mSurfaceHolder.getSurface().isValid()) { 
        continue; 
       } 
       Canvas canvas = mSurfaceHolder.lockCanvas(); 
       canvas.drawRGB(02, 02, 150); 
       if (x != 0 || y != 0) { 
        Bitmap test = BitmapFactory.decodeResource(getResources(), 
          R.drawable.ic_launcher); 
        canvas.drawBitmap(test, x, y, null); 
       } 
       mSurfaceHolder.unlockCanvasAndPost(canvas); 
      } 
     } 

     public void pause() { 
      isRunning = false; 
      while (true) { 
       try { 
        mThread.join(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       break; 
      } 
      mThread = null; 
     } 

     public void resume() { 
      isRunning = true; 
      mThread = new Thread(); 
      mThread.start(); 
     } 

    } 

} 
+0

은 내가 스레드 –

답변

1

실행 파일을 mThread에 추가하십시오.

public void resume() { 
     isRunning = true; 
     mThread = new Thread(this); 
     mThread.start(); 
    } 
+0

아에하지만 코드에서와 같이 그것을 제공 실행 가능한이 없습니다. –

+0

을 시작하고 그런 식으로 onResume – SceLus

+0

이것은 내가 이미 작성한 것입니다 –

관련 문제