在Xamarin Android中结合TapGestureRecognitor和PangestureRecognitor
我有以下结构在Xamarin Android中结合TapGestureRecognitor和PangestureRecognitor,android,xamarin,xamarin.forms,xamarin.android,Android,Xamarin,Xamarin.forms,Xamarin.android,我有以下结构 Frame frame = new Frame(); Grid grid = new Grid(); ContentView contentView = new ContentView(); contentView.GestureRecognizers.Add(CreateSwipeEffect()); grid.Children.Add(contentView, 0, 0); frame.GestureRecognizers.Add(CreateFrameTapEffect())
Frame frame = new Frame();
Grid grid = new Grid();
ContentView contentView = new ContentView();
contentView.GestureRecognizers.Add(CreateSwipeEffect());
grid.Children.Add(contentView, 0, 0);
frame.GestureRecognizers.Add(CreateFrameTapEffect());
frame.Content = grid;
框架有两种可用的效果:第一种是我们可以滑动(PanGesture),第二种是我们可以轻触(TapSirture)。在iOS平台上,此解决方案非常有效。然而,在Android平台上,只有刷击效应被触发。我如何解决这一问题,使这两种效果都适用于Android平台?我在iOS和Android中使用您的代码,是的,它在iOS上运行良好,在Android上存在问题 但是,如果在添加标签或帧控件后添加tapGenture和panGesture,它可以正常工作。也许Android的某些机制与iOS有些不同。请看下面的代码,我在Android和iOS上测试了它,一切正常
public Page17()
{
InitializeComponent();
var panGesture = new PanGestureRecognizer();
panGesture.PanUpdated += PanGesture_PanUpdated;
var tapGenture = new TapGestureRecognizer();
tapGenture.NumberOfTapsRequired = 1;
tapGenture.Tapped += TapGenture_Tapped;
Frame frame = new Frame();
frame.BackgroundColor = Color.AliceBlue;
Grid grid = new Grid();
Label label= new Label();
label.Text = "this is test!";
label.BackgroundColor = Color.Red;
grid.Children.Add(label,0,0);
frame.Content = grid;
stacklayout1.Children.Add(frame);
frame.GestureRecognizers.Add(tapGenture);
label.GestureRecognizers.Add(panGesture);
}
private void TapGenture_Tapped(object sender, EventArgs e)
{
Console.WriteLine("the tapgesture fire!");
}
private void PanGesture_PanUpdated(object sender, PanUpdatedEventArgs e)
{
Console.WriteLine("the pangesture fire");
}
您正在将Tap事件分派到帧(父视图),将Swip事件分派到ContentView(子视图)。 根据: 请记住,硬件密钥事件始终传递到视图 目前是焦点。它们从顶部开始发送 查看层次结构,然后向下,直到它们到达相应的 目的地
因此,根据您在点击框架时的代码,android系统认为您希望在ContentView(不存在)上触发点击事件,因为当前焦点是ContentView而不是框架。因此,如果您有具体的需求,您需要尝试其他方法来实现它。如果没有,请在ContentView上注册点击事件。@Cherry Bu-MSFT使用内容视图解决方案进行精确检查。@Cherry Bu-MSFT。我建议延长框架中的标签以填充最大值。然后,只有平移手势效果有效,所以这不是一个好的解决方案。@maciejka,我可以在框架中扩展标签时重现您的问题,请在github for Xamarin中反馈此问题。表单中,我也向Microsoft团队反馈此问题,谢谢。在您的示例中,红色标签无法完全垂直和水平填充网格。当您完全填充时,则没有空白,然后点击效果不起作用,只有平移手势效果起作用。