2012-03-12 5 views
0

은 (exemple에 대한 2 개의 구형이 있고 난 클릭 사각형 것을 감지 할) 캔버스에안드로이드 캔버스

package com.cerbertek; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Region; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class PlayGameView extends SurfaceView implements SurfaceHolder.Callback { 

    private CanvasThread canvasthread; 
    private Context mContext; 
    private Region firstRec; 

    private class CanvasThread extends Thread { 
     private SurfaceHolder _holder; 
     private boolean _run = false; 

     public CanvasThread(SurfaceHolder surfaceHolder) { 
      _holder = surfaceHolder; 
     } 

     public void setRunning(boolean run) { 
      _run = run; 
     } 

     @Override 
     public void run() { 
      Canvas c; 
      while (_run) { 
       c = null; 
       try { 
        c = _holder.lockCanvas(null); 
        synchronized (_holder) { 
         onDraw(c); 
        } 
       } finally { 
        if (c != null) { 
         _holder.unlockCanvasAndPost(c); 
        } 
       } 
      } 
     } 
    } 


    public PlayGameView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     SurfaceHolder holder = getHolder(); 
     holder.addCallback(this); 
     canvasthread = new CanvasThread(getHolder()); 
     setFocusable(true); 
    } 

    @Override 
    public void onDraw(Canvas canvas) {  
      Paint paint = new Paint(); 
      Bitmap wrench = BitmapFactory.decodeResource(getResources(), R.drawable.wrench); 
      canvas.drawColor(Color .BLACK); 
      for(int i = 0; i < 4; i++) { 
       for(int j = 0; j < 4; j++) { 
        int left = canvas.getWidth()/2 - wrench.getWidth()*2 + j*wrench.getWidth(); 
        int top = 0 + i*wrench.getHeight(); 
        canvas.drawBitmap(wrench, left, top, null); 

        Log.d(i + " " + j, left+ " " + top); 
       } 
      } 

    } 



    @Override 
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 


    } 


    @Override 
    public void surfaceCreated(SurfaceHolder arg0) { 
     canvasthread.setRunning(true); 
     canvasthread.start(); 
    } 


    @Override 
    public void surfaceDestroyed(SurfaceHolder arg0) { 
     boolean retry = true; 
     canvasthread.setRunning(false); 
     while (retry) { 
       try { 
         canvasthread.join(); 
         retry = false; 
       } catch (InterruptedException e) { 
         // we will try it again and again... 
       } 
     } 
    } 
} 

그래서 내가 클릭 위치를 감지 할 몇 가지 필드를 그립니다 클래스는, 거기 클릭 . 내가 setOnClickListener 내보기로 설정할 수 있지만 클릭하는 위치를 얻는 방법? 다음 내가 그리는 동안 지역을 설정하려면 (그것은, 권리 그래? 아닌지?) 활동에 난 좌표가 지역

이 포함되어 클릭되어 있는지 확인합니다 그래서 난 클릭 2의 COORD을 얻을 수있는 방법 1)) 내 아이디어가 빈약하기 때문에 모든 것을 할 수있는 좋은 방법은 무엇입니까?

답변

3

setOnTouchListener을보세요.

공공 부울 onTouch (보기 V, MotionEvent 이벤트)

MotionEvent 터치가 실제로 발생한 위치에 대한 정보가 다음 OnTouchListener

는 다음 서명을하는 방법을 구현합니다. (event.getX()event.getY())

+0

좋습니다. 시도해 보겠습니다. 감사 – user1128677

관련 문제