Xamarin.Forms 滑动手势识别器
Posted
技术标签:
【中文标题】Xamarin.Forms 滑动手势识别器【英文标题】:Xamarin.Forms swipe gesture recognizer 【发布时间】:2014-07-20 03:31:40 【问题描述】:Xamarin.Forms 是非常新且非常令人兴奋的,但目前我发现它的文档有限且示例很少。我正在尝试制作一个界面类似于“MasterDetailPage”的应用程序,但也有一个右侧的 Flyout 视图,而不仅仅是左侧的。
我发现使用当前的 API 是不可能的,所以我的方法是:
-
创建一个共享的 GestureRecognizer 界面。
在 android 应用和 ios 中,将此接口绑定到 iOS 上的 UIGestureRecognizer 或 android 上的 OnTouch 方法。
对于 iOS,这是可行的,但对于 Android,活动上的触摸侦听器似乎不起作用。
我的方法好吗?也许还有另一种直接从共享代码中捕获触摸事件的好方法?或者您有什么想法为什么公共覆盖 bool OnTouchEvent 在 AndroidActivity 中不起作用?
【问题讨论】:
如果没有任何代码,我们不能说太多 @Daniel 找到任何解决方案? 【参考方案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://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/gestures/swipe
【讨论】:
【参考方案2】: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
【讨论】:
【参考方案3】:我建议您使用 CarouselView 方法,例如您可以将现有的解决方案与支持滑动手势的轮播视图一起使用。因此,您的视图将被包装到此轮播视图控件中
【讨论】:
以上是关于Xamarin.Forms 滑动手势识别器的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms - 在点击手势识别器上添加调用对象作为参数
Xamarin.Forms 警告:尝试使用 iOS 图像/手势识别器在其视图不在窗口层次结构中的 * 上呈现 *
iOS 上的 Xamarin.Forms Master/Detail 边缘滑动
升级到 Visual Studio 16.11.1 后,Xamarin Forms 破坏了 XANS 7028:System.IO.FileNotFoundException:无法加载程序集“Xama