2015-03-31 4 views
1

Я разрабатываю клавиатуру на Android (например, клавиатуру Брайля). Для тех из вас, кто не знает, Брайль состоит из шести точек, и комбинации этих точек образуют символы. Я написал клавиатуру с использованием класса KeyboardView с основным прослушивателем, но проблема в том, что при прослушивании по умолчанию только одна клавиша будет нажата одновременно. Для формирования буквы l требуется три точки (точки 1, 2 и 3). Я должен нажимать каждую клавишу отдельно, а затем пробел, чтобы написать письмо. Я хотел бы, чтобы клавиатура функционировала по-другому; все точки могут быть нажаты одновременно, а когда точки отпущены, буква записывается. Я прав, думая, что это невозможно с слушателем в комплекте с KeyboardView? Если я переписал процедуру onTouch в KeyboardView, будет ли эта последняя функциональность возможной? Одновременно ли функция OnTouch обнаруживает несколько событий action_down? Я думал, что если это возможно, я могу определить координаты x-y пресса, прокрутить клавиши на клавиатуре и определить, какие клавиши нажаты. Если это невозможно, мне нужно сделать шаг ниже этого и написать onTouch для основного вида? Большое вам спасибо.Функциональность мягкой клавиатуры Multi-Touch в Android

ответ

3

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

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

Вы можете использовать onTouch, чтобы получить несколько пальцев вниз, но это не будет на ACTION_DOWN. Вы получаете ACTION_DOWN для первого пальца вниз, затем ACTION_POINTER_DOWN для каждого дополнительного пальца. Вот как это работает для любого вида. Тогда любое движение на любом пальце будет генерировать ACTION_MOVE. Когда пальцы отпускаются, вы получаете ACTION_POINTER_UP для всех пальцев до последнего, который получает ACTION_UP.

+0

Большое спасибо. Я думаю, что я буду использовать KeyboardView для размещения ключей, но я буду переписывать процедуру onTouch. Класс Key просто кажется приятным, потому что есть методы, которые вернут true, если переданные в них значения x-y попадут в один из ключей. Я могу определить позиции из файла XML. –

Смежные вопросы