我正在开发一款游戏并遇到了一些麻烦,我可能没有正确执行此操作,因为我是 Android 图形方面的新手。
我有一个SurfaceView
和一个ArrayList
我自己的Card
扩展对象View
。我覆盖对象的onDraw
方法Card
,然后在SurfaceView's onDraw
我绘制所有内容。绘图部分可以正常工作。
我现在尝试使用 检测单个卡片何时被触摸onTouchListener
,我为每张卡片设置了侦听器,但它检测到触摸就好像被触摸的视图是SurfaceView
. 可能我的整个想法都是错误的,所以我正在征求你的意见。
一些代码:
public GameSurfaceView(Context context) {
super(context);
GAME_STATE = GameState.LOADING;
this.context = context;
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Canvas c = holder.lockCanvas(null);
onDraw(c);
holder.unlockCanvasAndPost(c);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
});
}
SurfaceView onDraw():
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRGB(30, 180, 30);
for (Card card : user.getTableCards()) {
card.draw(canvas);
}
}
卡片的 onDraw():
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(getBitmap(), x, y, null);
}
和 onTouch
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d("TOUCH", "Class: " + v.getClass().toString());
if (v.getClass() == Card.class) {
Log.d("CARD", "Touched: " + ((Card) v).getValue());
}
return true;
}
我总是让SurfaceView
课程被记录下来。这甚至是做类似事情的正确方法吗?我需要检测对同一类的单个对象的触摸..
我目前通过向Rect
每张卡添加一个类型的成员然后循环并检查触摸的 x 和 y 是否包含在该矩形中来做到这一点,但这似乎是一种昂贵的方式,迭代每张卡(即使最大52)并检查它..
谢谢