Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Xamarin Android中结合TapGestureRecognitor和PangestureRecognitor_Android_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

在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团队反馈此问题,谢谢。在您的示例中,红色标签无法完全垂直和水平填充网格。当您完全填充时,则没有空白,然后点击效果不起作用,只有平移手势效果起作用。