通过手势给孩子们

时间:2016-05-03 21:01:24

标签: xamarin xamarin.forms mr.gestures

我有一个带有游戏板的应用程序,可以通过使用mr.gestures进行平移来拾取和移动磁贴,这样做效果很好。

我的游戏主板是MR.Gestures.AbsoluteLayout,我抓住了平移手势。

如果我将该游戏板作为一个孩子添加到另一个MR.Gestures.AbsoluteLayout,那么看起来这些手势被父母阻止,它就不再起作用了。

有没有办法将手势传递给儿童或以某种方式忽略父母的手势?

1 个答案:

答案 0 :(得分:0)

  

有没有办法将手势传递给儿童或忽略手势   以某种方式在父母身上?

对我来说,这个问题只出现在Android上..答案是肯定的:

当父母收到手势事件时,必须检查手指x,y是否在特定的孩子视图中。如果是,父母就会忽略这个手势。

关于代码,只是通过一个事件处理程序来获取想法。在我的情况下,我有2个孩子(喜欢和书签)在父框架上:

enter image description here

    //-------------------------------------------------------------------
    private void OnTapped_MainFrame(object sender, TapEventArgs e)
    //-------------------------------------------------------------------
    {
        //Get parent screen abs pos in pixels
        //We are using native code get absolute screen position
        var ptFrame = DependencyService.Get<INiftyHelpers>().GetViewAbsolutePosition((View)sender);

        //Gets childs (hotspots) screen abs position in pixels
        var ptFav = DependencyService.Get<INiftyHelpers>().GetViewAbsolutePosition((View)hsFav);
        var ptLike = DependencyService.Get<INiftyHelpers>().GetViewAbsolutePosition((View)hsLike);

        //Gets childs (hotspots) rectangles, everything in pixels using screen density
        var rectFav = new Rectangle(ptFav, new Size(hsFav.Width * AppHelper.DisplayDensity, hsFav.Height * AppHelper.DisplayDensity));
        var rectLike = new Rectangle(ptLike, new Size(hsLike.Width * AppHelper.DisplayDensity, hsLike.Height * AppHelper.DisplayDensity));

        //Convert the finger XY to screen pos in pixels
        var ptTouch = new Point(ptFrame.X + e.Center.X * AppHelper.DisplayDensity, ptFrame.Y + e.Center.Y * AppHelper.DisplayDensity); //absolute relative to screen

        //check if withing childs
        if (rectFav.Contains(ptTouch) || rectLike.Contains(ptTouch))
            return; //Ignore input and let childs process their gestures!

        //Process input
        //..

    }