Как подсказал @CommonsWare, вам нужно отслеживать все позиции карт, присутствующие в данный момент на экране (или только все), и в onTouchEvent()
проверять, произошло ли событие на алмазной карте
Отслеживать карты вроде этого:
Map<RectF, Drawable> cards = new HashMap();
// in onDraw method when you draw card also add it to that map
@Override
protected void onDraw(Canvas canvas){
//...
if (type[i]==0){
diamond.setBounds(x[i%column], y[i],x[i%column]+a,y[i]+b);
diamond.draw(canvas);
cards.put(new RectF(x[i%column], y[i],x[i%column]+a,y[i]+b), diamond)
} else {
circle.setBounds(x[i%column], y[i],x[i%column]+a,y[i]+b);
circle.draw(canvas);
cards.put(new RectF(x[i%column], y[i],x[i%column]+a,y[i]+b), diamond)
}
//...
}
, а затем в onTouchEvent()
int points = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
//...
float x = event.getX();
float y = event.getY();
for (Map.Entry<RectF, Drawable> entry : cards.entrySet()) {
if (entry.getKey().contains(x, y) && entry.getValue() == diamond)
points++;
}
//...
}
Также вы можете настроить использование, чтобы набирать очки за одну карту только один раз, введя некоторое значение boolean
( проверить, была ли нажата кнопка) и идентификатор карты (чтобы отличить guish его от других карт) и сохранить их вместе с прямоугольником карты и Drawable
.
Или вы можете просто очистить столбец от карт с позиции алмазной карты, по которой щелкнули, и до конца столбца (чтобы он не перерисовывался в следующем кадре)
Надеюсь, это поможет