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

Android MotionEvent: передача между представлениями

У меня есть две настраиваемые группы просмотра, которые реализуют onTouchListener для события движения.

Я использую макет кадра, чтобы показать их обоих. Вторая группа просмотра меньше по размеру, чем первая. Таким образом, первый находится на заднем плане, а второй - на переднем.

Я хочу перетащить элемент для второй/меньшей группы просмотра в фоновую группу просмотра.

Проблема: при перетаскивании элемента в фоновую группу просмотра (i.e mAwesomePager) я хочу, чтобы ACTION_UP запускался во второй группе просмотра (меньшей) и ACTION_MOVE запускался в первой группе просмотра, поэтому в основном touchEvent переносится из меньшей группы просмотра в большую в фон и MotionEvent продолжаются без того, чтобы пользователь убирал палец с экрана, а затем возвращал его обратно.

Вот часть полезного кода:

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (mRectOut == true) {
        ev.setAction(MotionEvent.ACTION_UP);
        mFrame.bringChildToFront(mAwesomePager);
        //mAwesomePager.setClickable(true);

        // Obtain MotionEvent object
        long downTime = SystemClock.uptimeMillis();
        long eventTime = SystemClock.uptimeMillis() + 100;
        // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
        int metaState = 0;
        MotionEvent motionEvent = MotionEvent.obtain(
                downTime,
                eventTime,
                MotionEvent.ACTION_DOWN,
                ev.getX(),
                ev.getY(),
                metaState
        );
        mAwesomePager.getChildAt(mAwesomePager.mLastDragged).dispatchTouchEvent(motionEvent);
    }
//some more code here

}

Я пытаюсь имитировать отключение касания в представлении переднего плана с помощью этого ev.setAction(MotionEvent.ACTION_UP); , теперь я хочу, чтобы фоновое представление взяло под контроль касание, пока касание удерживает перетаскиваемое изображение.


Ответы:


1

Взгляните на документацию метода onTouchEvent(), а точнее на его возвращаемый параметр:

Возвращает
True, если событие было обработано, и false в противном случае.

Если вы хотите, чтобы ваши события передавались в фоновое представление, вам нужно убедиться, что когда происходит ACTION_UP, метод возвращает false, чтобы Android знал, что событие движения еще не было использовано и должно быть передано в следующее представление в иерархии.

Вот основной фрагмент того, что нужно сделать:

public boolean onTouchEvent(MotionEvent ev) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        // handle ACTION_UP with the foreground view
        return false; // event will be sent to the background view
    } else {
        // handle ACTION_MOVE with the foreground view
        return true; // event will stop here
    }
}

Имейте в виду, что ваш фоновый вид также должен будет реализовать сенсорный прослушиватель в свою очередь, чтобы это произошло.

13.10.2015
  • Спасибо за ваш ответ. Я пытаюсь имитировать прикосновение в представлении переднего плана с помощью этого ev.setAction(MotionEvent.ACTION_UP); , теперь я хочу, чтобы фоновое представление контролировало прикосновение, пока прикосновение удерживает перетаскиваемое изображение. return false завершает сенсорные события для обоих представлений. 14.10.2015
  • Предполагая, что вы продолжаете возвращать true, отправляется ли создаваемое вами движение motionEvent в фоновое представление? 14.10.2015

  • 2

    Изменение этого mAwesomePager.getChildAt(mAwesomePager.mLastDragged).dispatchTouchEvent(motionEvent);

    к этому

    return mAwesomePager.dispatchTouchEvent(motionEvent);

    в конце концов сделал свое дело.

    14.10.2015
    Новые материалы

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

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

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

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

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

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

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