Я частично согласен с постом @passsy, но прихожу к другому выводу.Во-первых, как уже упоминалось, mTouchSlop
- это значение, которое нас интересует, и оно предоставляется через ViewConfiguration.get(context).getScaledTouchSlop();
Если вы проверяете источник Android на ViewConfiguraton , значение по умолчанию для TOUCH_SLOP - это 8dip , но в комментариях упоминается, что это значение является только запасным, и фактическое значение определяется при сборке ОС Android для этого конкретного устройства.(может быть больше или меньше, чем это значение. Похоже, что это верно для устройств Galaxy Tab)
Более конкретно для примера кода, значение mTouchSlop
читается из ViewConfiguration
, когда View
инициализируется, но значение доступно только в методе onTouchEvent
.Если вы расширяете View
и переопределяете этот метод (без вызова super
), то поведение mTouchSlop
в классе View
больше не имеет значения.
Более показательным (для нас) было то, что когдаПри изменении настроек Android для наложения событий касания на экран касание с небольшим перетаскиванием не регистрируется как событие движения, что подчеркивается тем фактом, что перекрестие из ОС Android не перемещается.Из этого мы пришли к выводу, что минимальное расстояние перетаскивания применяется на уровне операционной системы, и ваше приложение никогда не узнает о событиях перетаскивания, меньших, чем значение TOUCH_SLOP .Вы также должны знать, что TOUCH_SLOP не следует использовать напрямую, и API не рекомендует метод getTouchSlop
и рекомендует getScaledTouchSlop
, который учитывает размер экрана устройства и плотность пикселей.Побочным эффектом этого является то, что фактическая минимальная длина хода, воспринимаемая на разных устройствах, может варьироваться.например, на Galaxy Tab 2.0 7.0 "такое чувство, что мы можем нарисовать более короткие минимальные штрихи, используя ту же кодовую базу, что и при работе на Galaxy Tab 2.0 10.1"
. Вы также должны знать, что (если вы обнаружите, чтоспособ изменить это значение), это значение определяет, как системы Android различают нажатия и удары.То есть, если вы нажмете на экран, но ваш палец слегка двигается во время выполнения касания, он будет интерпретирован как касание, если оно сдвинулось менее чем TOUCH_SLOP , но как удар, если он переместился более чем на TOUCH_SLOP.Поэтому установка TOUCH_SLOP на меньшее значение увеличит вероятность того, что отвод будет интерпретирован как штрих.
Наш собственный вывод состоит в том, что это минимальное расстояние не может быть изменено на практикеи нам нужно с этим жить.