Проведите пальцем по экрану, активируя кнопки, как если бы они были нажаты - PullRequest
3 голосов
/ 08 апреля 2011

Если мой заголовок был недостаточно четким, я объясню это подробно:

Скажем, у нас есть экран, заполненный несколькими кнопками (10+), и мы нажимаем на одну, активируя onTouch/по щелчку.Если мы теперь переместим палец, не поднимая его, я хочу, чтобы он активировал любую другую кнопку, которую он скользит.В данном конкретном случае я хочу, чтобы звук воспроизводился при скольжении по виртуальному пианино.

Я знаю о решении onTouchListener, в котором вы регистрируете каждый ACTION_MOVE и находите некоторые границы, которые активируют новые события, но это далеко отоптимально, если у вас есть несколько кнопок и вы хотите разрешить плавное скольжение без задержки.

Я также прочитал эту ветку , в которой предлагалось объединить touchListener вида с листом жестов из действия, ноеще раз, это не кажется мне оптимальным для моей ситуации.

Я еще не пробовал комбинировать touchlistener с gestlistener, но я сделаю это, если кто-то скажет мне, что у него нет другого способа сделать это.

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

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

Я не понимаю, что вы имеете в виду по поводу ACTION_MOVE и задержек. Чтобы минимизировать задержку, отреагируйте на ACTION_DOWN, а затем на ACTION_MOVE, если он наводит другие клавиши, находясь в выключенном состоянии. Это не может быть быстрее, чем это. Для кнопок есть важная задержка, потому что событие onClick () запускается, когда пользователь поднимает палец, на ACTION_UP.

Кнопки просто не предназначены для работы, как вы описываете. Идея заключается в том, что если пользователь нажимает на кнопку, а затем одновременно убирает палец, это не вызывает события onClick для других представлений вокруг. Это предотвращает фиктивные щелчки.

1 голос
/ 18 декабря 2011

Я на самом деле выбрал «легкий» выход и использовал кнопки с помощью метода onTouch, используя ACTION_DOWN и ACTION_MOVE с вычислениями координат, которые в сочетании с event.getX() и event.getY() позволяют мне определить, какая кнопка в данный момент зависла , Это без задержки с 13 кнопками.

...