Nano Hash - криптовалюты, майнинг, программирование

Android-Как заставить движущиеся объекты на экране расширять кнопку

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

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

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

20.01.2012

Ответы:


1

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

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

Я получаю координаты 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();
    }
    // ......
}

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

20.01.2012
  • Да, это имеет смысл :) Моя проблема в том, что почти все было настолько абстрагировано до такой степени, что мне приходится возвращаться назад по цепочке наследования, чтобы выяснить, где и когда регистрировать событие движения. Мне передали этот проект, когда последний человек, работавший над ним, столкнулся с той же проблемой. Я использую холст для захвата рисунка, а затем отображаю холст на SurfaceView. Я предполагаю, что мой следующий шаг - выяснить, как передать x, y объектов с холста в представлении поверхности моему onTouchEvent. 20.01.2012

  • 2

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

    20.01.2012
  • Итак, что я пытаюсь сделать, так это взять объекты, которые я уже реализовал, которые свободно перемещаются по экрану, и сделать их класс расширением Button, чтобы я мог сделать их интерактивными объектами на экране. Объекты представлены на экране растровыми изображениями, и то, что мне нравится, когда пользователь щелкает один, просто открывается без использования хакерского способа, который я реализовал на данный момент, который должен проходить через 3 класса и не очень точен с большим количеством экранных объектов. 20.01.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..