有没有一种方法可以解决SwipeListener和同一视图上的触摸输入之间的冲突?

时间:2019-01-24 04:17:46

标签: xamarin xamarin.forms

我正在使用针对iOS,Android和UWP的Xamarin.forms开发应用程序。我无法同时使触摸和滑动听众同时工作。

我有一个带有一堆按钮的视图,其中有一些按钮是孩子的。我需要能够左右滑动该视图,还可以触摸按钮。


我尝试了多种方法:

尝试#1)在背景父视图上设置SwipeListener。如果用户首先触摸一个子按钮,则该按钮不起作用。因为孩子的z位置较高,所以他们拦截了触摸事件。

尝试#2)在位于所有内容顶部的视图上设置SwipeListener。滑动即可,但是我无法点击任何按钮。设置此视图的InputTransparent =“ False”将允许我点击按钮,但随后Swipe停止工作。

尝试#3)这几乎奏效。设置非常类似于尝试1,即背景父视图上的SwipeListener。不同之处在于每个按钮都没有Click事件。相反,我在每个按钮上使用了TapGestureRecognizer。这在UWP和iOS上效果很好。没有冲突。但是在Android上,如果您在滑动开始时触摸一个按钮,则滑动将无法按预期进行。它不一致地起作用,不执行任何操作或向错误的方向滑动。


我只发布一些代码。如果需要,我可以发布更多。但是,我希望可能会有一个有人知道的高级解决方案可以解决此问题。预先感谢您的关注。

//How I set my buttons' touch recognizer
var touchRecognizer = new TapGestureRecognizer { NumberOfTapsRequired = 1 };
touchRecognizer.Command = myViewModel.DayButtClickedCommand;
touchBox.GestureRecognizers.Add(touchRecognizer);

//How I set the swipe recognizer
SwipeListener swipeListener = new SwipeListener(MainHompageStackLayout);
swipeListener.SwipedLeft += swipedLeft;
swipeListener.SwipedRight += swipedRight;

1 个答案:

答案 0 :(得分:0)

我终于找到了可行的解决方案。万一它对任何人有用...

尝试#3距离不远。这是我当前的设置:

  • 没有按钮,没有单击事件。 TapGestureRecognizer改为在所有子代上设置。
  • 在背景父母和里面的所有孩子之间滑动手势识别器。
  • 我也停止使用'SwipeListener'类(我发现一个自定义的滑动监听器,可以对滑动进行更多控制),并切换到默认的SwipeGestureRecognizer。

我在iOS模拟器上进行了测试,并安装在Google Pixel XL和Surface Book的UWP上。现在只需滑动并触摸所有作品即可。

总而言之,我认为我的问题是两件事:

  1. 自定义SwipeListener 与TapGestureRecognizer发生了某种冲突。
  2. 我需要对父母(隐藏在下面)和孩子(在上面分层)同时进行刷卡识别,以实现一致的刷卡操作。