Android-Как расширить движущиеся объекты на экране - PullRequest
0 голосов
/ 20 января 2012

В приложении, над которым я работаю, у меня есть класс, который расширяет вид поверхности, и другой, который обрабатывает все вычисления, чтобы выяснить, где и когда объекты должны быть нарисованы на экране.Прямо сейчас у меня есть своего рода хакерский способ регистрации щелчков на экране, когда список объектов просматривается при каждом щелчке, а ближайший объект принимает щелчок.Это работает, когда на экране только 3 или 4 объекта, но когда у меня больше кликов, регистрируются неправильные объекты.

Я пытаюсь сделать так, чтобы экранные объекты расширяли класс кнопки, чтобы я мог просто передатьMotionEvent для них, когда они нажали.Но из-за того, что у меня есть классы, в настоящий момент меня немного смущает вопрос, как это можно сделать.

Кто-нибудь знает какие-либо учебные пособия, касающиеся расширения класса кнопок для использования с движущимися объектами на экране?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Я думаю, вы как бы смешиваете вещи. Кнопка обычно используется в макете (материал макета XML). Когда вы используете вид поверхности, вам (скорее всего) нужно реализовать собственную «кнопку». Однако, возможно, можно просто наложить вид рамы поверх вида поверхности и поместить кнопку в этом виде.

1 голос
/ 20 января 2012

Если я правильно понимаю, вы пытаетесь определить, какой объект, нарисованный на экране, был нажат?

Я знаю, что это не совсем то, что вы просили, но когда я реализовал пользовательское представление прошлого, я обычно обрабатывал обнаружение щелчков следующим образом:

Я получаю координаты x и y объектов, которые вы хотите кликать. В вашем методе onTouchEvent (событие MotionEvent) в вашем классе SurfaceView есть оператор if, который проверяет, находятся ли x и y щелчка в пределах вашего объекта.

Вот некоторый код, чтобы лучше проиллюстрировать то, что я говорю:

@Override
public boolean onTouchEvent(MotionEvent event) 
{
    // If the user touches the space occupied by object1
    if(event.getAction() == MotionEvent.ACTION_DOWN 
            && event.getX() <= object1.xPosition + object1.width 
            && event.getX() >= object1.xPosition
            && event.getY() >= object1.yPosition 
            && event.getY() < object1.yPosition + object1.height)
    {
            // The click was in the bounds of object1's current location
        object1.doSomething();
    }
    // ......
}

Надеюсь, это имеет смысл и несколько полезно.

...