Различие между прокруткой и смахиванием в мобильном приложении Flex

Можно ли отличить жест горизонтального смахивания от горизонтальной прокрутки в Flex Mobile. У меня есть список (горизонтальный макет) без прикрепленного к нему слушателя и представление с прикрепленным к нему прослушивателем GestureSwipe, когда я пытаюсь прокрутить список, жест смахивания срабатывает, очевидно. Я попытался добавить прослушиватель событий жеста в список и вызвать функцию с помощью event.stopPropagation(), которая останавливает запуск жеста в представлении, но поскольку список занимает 85% экрана, это делает его довольно сложно вызвать событие просмотра, которое побеждает объект того, что я хочу сделать.

Есть ли способ отличить два действия друг от друга, скорость, продолжительность или что-то еще?

Использование FlashDevelop и Flex SDK v4.14.1, Air 17.0, сборка для Android

Спасибо


person Shaine Fisher    schedule 30.05.2015    source источник


Ответы (2)


Я никогда не разрабатывал Flex Mobile, но вы можете отличить жест горизонтальной прокрутки от горизонтальной прокрутки, если бы вы могли переопределить interceptOnTouchEvent для получения события;

person Qian    schedule 30.05.2015
comment
Это то, что я не думаю, что смогу сделать во Flex, и, похоже, я не могу найти кого-то еще, задающего тот же вопрос. Честно говоря, я даже не могу представить себе разницу между горизонтальной прокруткой и жестом смахивания, в обоих случаях вы касаетесь экрана справа и скользите влево (для этого примера). Я хотел бы думать, что, возможно, если вы не уберете палец с экрана, это сразу означает, что это прокрутка, но, увы, я ошибаюсь. Я посмотрю, смогу ли я найти метод, основанный на вашем предложении, и дам вам знать, спасибо. - person Shaine Fisher; 30.05.2015
comment
@Shaine Fisher, можете ли вы использовать положение точки касания, чтобы определить, какой жест будет активирован? - person Qian; 30.05.2015
comment
Если я устанавливаю MultitouchInputMode.TOUCH_POINT, тогда AIR отправляет события мыши и касания, но не события жестов. Что убьет все мои события GestureSwipe, которые появляются в каждом представлении. Когда я использую MultitouchInputMode.GESTURE, я не получаю подробностей о точке касания, я просто получаю компонент диспетчеризации и направление. - person Shaine Fisher; 30.05.2015
comment
Суть проблемы в том, что Flex Mobile List не имеет события прокрутки для прослушивания, поэтому я не могу поймать событие прокрутки на уровне списка, они оба определяются как пролистывание и перехватываются на уровне просмотра с помощьюgestSwipeHandler функция. Argghh (да, я знаю, не очень технично, но довольно хорошо снимает стресс) - person Shaine Fisher; 30.05.2015

Итак, я не могу понять, как различать 2 события, однако, похоже, есть обходной путь, не очень хороший, но я полагаю, что он может сработать, однако я вижу проблему с добавлением прослушивателя событий после списка прокрутил до самой дальней точки, вам потребуется еще одно действие прокрутки/прокрутки, чтобы сделать переход просмотра, что не очень хорошо для пользователей.

list.scroller.viewport.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler );

protected function propertyChangeHandler(event:PropertyChangeEvent):void
{
    if (event.property == "horizontalScrollPosition" )
    {
        if (event.newValue == (event.currentTarget.measuredWidth - event.currentTarget.width )) {
                navigator.pushView(view.RightView);
        }
        if(event.newValue == 0){
                navigator.pushView(view.LeftView);
        }
    }
}

У кого-нибудь есть мысли по этому подходу?

person Shaine Fisher    schedule 30.05.2015
comment
У меня была мысль, что я могу просто вручную отправить TransformGestureEvent.GestureSwipe в приведенном выше условном выражении, но я не могу установить OffsetX или OffsetY, когда пытаюсь это сделать. - person Shaine Fisher; 30.05.2015