安卓 Canvas 点击

标签 android canvas click coordinates

有一个类,在 Canvas 上绘制一些字段

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

所以我想检测我点击的位置(例如,有 2 个矩形,我想检测我点击的是哪个矩形)。我可以将 setOnClickListener 设置为我的 View ,但是如何获得点击的位置? 然后我想在绘图时设置区域(它是对的,是吗?还是不是?)并且在 Activity 中我将检查点击坐标是否包含区域

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

最佳答案

查看setOnTouchListener

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

public boolean onTouch(View v, MotionEvent event)

MotionEvent 包含有关触摸实际发生位置的信息。 (event.getX()event.getY())

关于安卓 Canvas 点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672610/

相关文章:

android - NoSuchFieldError : No static field listView1 of type I in class Lcom/disdemo/R$id; or its superclasses

javascript - 如何在 map 应用中实现稳定的缩放

javascript - Canvas 动画 Javascript 反向

javascript - 访问 Chrome 控制台中提到的对象的完整路径

java - 将 tdata 帧发送到套接字

android - 如何从 Android 的 json 中的任何 url 获取响应,而不是在响应之后我想解析它

android - 登录成功后如何开始新 Activity ?

javascript - Ajax 响应图像元素到 Canvas 上

在选择器中指定动态类名时出现 jQuery 语法错误

android - 在 Android SDK 中执行点击按钮