2012-03-12 83 views
0

有类,即在画布上绘制一些领域安卓单击画布

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

,所以我想检测,其中i点击(用于为例有2个rects,我想检测RECT我点击了什么) 。我可以设置setOnClickListener我的观点,但如何获得点击的位置? 然后我想同时提请设置的区域(这是正确的,是吗?不?),并在活动我会检查被点击坐标包含地区

所以 1)我怎样才能获得的点击 2的坐标)什么是做所有这些事情的很好的方法,因为我的想法经常很差

回答

3

看看setOnTouchListener

OnTouchListener实现具有以下签名的方法:

公共布尔onTouch(视图V,MotionEvent事件)

的MotionEvent有大约在触控实际发生的信息。 (event.getX()event.getY()

+0

好的,我会试试!谢谢 – user1128677 2012-03-12 19:41:50