сенсорный экран: отличить начало прокрутки от нажатия - PullRequest
0 голосов
/ 14 сентября 2011

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

ОС имеет три соответствующие функции обратного вызова (1) обнаружение касания экрана, (2) обнаружение перетаскивания пальца по экрану и (3) обнаружение, когда палец покидает экран. В каждом случае функция обратного вызова получает экранные координаты, где произошло соответствующее событие.

Проблема в том, что перетаскивание начинается с прикосновения пальца к экрану и заканчивается, когда палец покидает экран. Постукивание обычно определяется как касание, очень короткое перетаскивание и конец касания. Если я просто вызову указанную функцию одним касанием, я вызову события перетаскивания на экране, а не подлинные касания.

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

Мое приложение на python для устройства symbian. Поскольку это не очень популярная платформа, мы будем благодарны за любые предложения по наилучшему способу реализации.

1 Ответ

0 голосов
/ 15 сентября 2011

Лучший подход, который я могу придумать, это:

Сенсорный обратный вызов: установите action_location = drag_location = current_location (current_location сообщается os)

Бесконтактный обратный вызов: если action_location в пределах distance_threshold (например,, 20 или 25 пикселей) current_location, выполнить действие

Перетаскивание обратного вызова: если drag_location больше, чем distance_threshold от current_location, прокрутите и установите drag_location = current_location

...