Xamarin.Forms滑动手势识别器

19

Xamarin.Forms非常新颖和令人兴奋,但目前看来其文档和示例比较有限。我正在尝试创建一个类似于“MasterDetailPage”的界面,并且还要添加右侧菜单视图,而不仅仅是左侧菜单。

我发现使用当前的API实现这一点是不可能的,所以我的解决方案如下:

  1. 创建一个共享的GestureRecognizer接口。
  2. 在Android应用程序和iOS中将此接口绑定到iOS上的UIGestureRecognizer或Android上的OnTouch方法。

iOS部分已经可以工作了,但是在Android上活动的触摸监听器似乎不起作用。

我的解决方案好吗?也许有另一种捕获共享代码中的触摸事件的好方法吗?或者您有任何想法为什么public override bool OnTouchEvent在AndroidActivity中不起作用吗?


没有代码,我们无法得出太多信息。 - Sten Petrov
@Daniel找到解决方案了吗? - nikhilgohil11
3个回答

1

对于 Xamarin.Forms 的滑动手势识别器,添加 SwipeGestureRecognizer

<BoxView Color="Teal" ...>
<BoxView.GestureRecognizers>
    <SwipeGestureRecognizer Direction="Left" Swiped="OnSwiped"/>
</BoxView.GestureRecognizers>
</BoxView>

这是相应的C#代码:

var boxView = new BoxView { Color = Color.Teal, ... };
var leftSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Left };
leftSwipeGesture.Swiped += OnSwiped;

boxView.GestureRecognizers.Add(leftSwipeGesture);

更多内容请查看这里:https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/gestures/swipe


0
MasterDetailPage和其他共享元素只是供视图渲染器使用的容器。您最好的选择是创建一个自定义的LRMasterDetailPage(左右..),并为其提供DetailLeft和DetailRight属性。然后,您可以为此自定义元素在每个平台上实现自定义ViewRenderer。
该元素:
public class LRMasterDetailPage {
    public View LeftDetail;
    public View RightDetail;
    public View Master;
}

渲染器:

[assembly:ExportRenderer (typeof(LRMasterDetailPage), typeof(LRMDPRenderer))]
namespace App.iOS.Renderers
{
    public class LRMDPRenderer : ViewRenderer<LRMasterDetailPage,UIView>
    {
        LRMasterDetailPage element;

        protected override void OnElementChanged (ElementChangedEventArgs<LRMasterDetailPage> e)
        {
            base.OnElementChanged (e);
            element = e.NewElement;
            // Do someting else, init for example
        }

        protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "Renderer")
                    return;
            base.OnElementPropertyChanged (sender, e);

            if (e.PropertyName == "LeftDetail")
                updateLeft();

            if (e.PropertyName == "RightDetail")
                updateRight();
        }

        private void updateLeft(){
            // Insert view of DetailLeft element into subview
            // Add button to open Detail to parent navbar, if not yet there
            // Add gesture recognizer for left swipe
        }
        private void updateRight(){
            // same as for left, but flipped
        }
    }
}

0
我建议您使用CarouselView方法,例如,您可以使用已经存在的支持滑动手势的Carousel View解决方案。因此,最终您的视图将被包装在这个Carousel View控件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接