Xamarin表单向左滑动/向右滑动手势

Kyl*_*yle 30 c# xaml xamarin xamarin.forms

我想通过说我对移动开发,Xamarin,C#,.Net完全陌生而言.

我正在努力使用Xamarain Forms创建一个移动应用程序,并且遇到了无法使用滑动手势的问题,至少根据我看到的文档.

我找到了这个网站:http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/

这描述了如何为IOS/Android添加一些额外的手势,以便在表单的上下文中访问.在我尝试遵循这一点之前,我想看看是否有其他人已经在Xamarin Forms应用程序中实现了滑动以及它们是如何实现的.

我的目标是必须有一个水平堆栈布局.此布局包含7个按钮,每个按钮反映当前一周的一天.在堆栈布局上向左滑动会将按钮的文本更改为上一周.向右滑动会将按钮的文本更改为下周.

所以我也尝试使用MVVM和XAML.那么我可以分开向左滑动和向右滑动动作吗?我想使用ICommand根据滑动的方向将某个参数传递给函数.

任何这个或任何建议的例子将​​不胜感激.

Ran*_*mar 26

不需要第三方库..无需支付..只需添加这两个类并实现您的滑动监听器

第1步:复制粘贴这两个类

SwipeListener.cs

using System;
using Xamarin.Forms;

namespace SwipeLib
{
public class SwipeListener : PanGestureRecognizer
{
    private ISwipeCallBack mISwipeCallback;
    private double translatedX = 0, translatedY = 0;

    public SwipeListener(View view, ISwipeCallBack iSwipeCallBack)
    {
        mISwipeCallback = iSwipeCallBack;
        var panGesture = new PanGestureRecognizer();
        panGesture.PanUpdated += OnPanUpdated;
        view.GestureRecognizers.Add(panGesture);
    }

    void OnPanUpdated(object sender, PanUpdatedEventArgs e)
    {

        View Content = (View)sender;

        switch (e.StatusType) {

            case GestureStatus.Running:

                try {
                    translatedX = e.TotalX;
                    translatedY = e.TotalY;
                } catch (Exception err) {
                    System.Diagnostics.Debug.WriteLine("" + err.Message);
                }
                break;

            case GestureStatus.Completed:

                System.Diagnostics.Debug.WriteLine("translatedX : " + translatedX);
                System.Diagnostics.Debug.WriteLine("translatedY : " + translatedY);

                if (translatedX < 0 && Math.Abs(translatedX) > Math.Abs(translatedY)) {
                    mISwipeCallback.onLeftSwipe(Content);
                } else if (translatedX > 0 && translatedX > Math.Abs(translatedY)) {
                    mISwipeCallback.onRightSwipe(Content);
                } else if (translatedY < 0 && Math.Abs(translatedY) > Math.Abs(translatedX)) {
                    mISwipeCallback.onTopSwipe(Content);
                } else if (translatedY > 0 && translatedY > Math.Abs(translatedX)) {
                    mISwipeCallback.onBottomSwipe(Content);
                } else {
                    mISwipeCallback.onNothingSwiped(Content);
                }

                break;

        }
    }

}
}
Run Code Online (Sandbox Code Playgroud)

ISwipeCallBack.cs

using System;
using Xamarin.Forms;
namespace SwipeLib
{  
public interface ISwipeCallBack
{

    void onLeftSwipe(View view);
    void onRightSwipe(View view);
    void onTopSwipe(View view);
    void onBottomSwipe(View view);
    void onNothingSwiped(View view);
}
}
Run Code Online (Sandbox Code Playgroud)

第2步:从您的Xamarin表单传递视图和界面obj.然后你得到结果

在我的情况下,我通过了标签

 SwipeListener swipeListener = new SwipeListener(lbl_swipe, this);
Run Code Online (Sandbox Code Playgroud)

第3步:实现ISwipeCallBack接口

public partial class SwipeLibPage : ContentPage, ISwipeCallBack
Run Code Online (Sandbox Code Playgroud)

示例项目 - > https://github.com/rranjithkumar100/Xamarin-Swipe-Library


Ami*_*ily 12

Xamarin.Forms引入了SwipeGestureRecognizer:

<BoxView Color="Teal" ...>
    <BoxView.GestureRecognizers>
        <SwipeGestureRecognizer Direction="Left" Swiped="OnSwiped"/>
    </BoxView.GestureRecognizers>
</BoxView>
Run Code Online (Sandbox Code Playgroud)


Joe*_*air 11

如果您愿意为第三方库付费(并且您正在使用Xamarin Forms,那么这是一个很好的可能性),MR.Gestures支持所有Xamarin.Forms视图上的所有触摸手势.我成功地使用它并且非常满意它.它的成本非常合理10欧元,并且具有出色的文档.

如果您是许多对Xamarin Forms不支持触摸手势感到失望的人之一,请考虑在UserVoice投票支持此建议.


Tom*_*zyk 7

您可以随时查看这个简单的演示.并使用如下:

GestureFrame gi = new GestureFrame
        {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,
            BackgroundColor = Color.FromHex("bf3122"),
        };

        gi.SwipeDown += (s, e) =>
        {
            DisplayAlert("Gesture Info", "Swipe Down Detected", "OK");
            ViewModel.SampleCommand.Execute("Swipe Down Detected");
        };

        gi.SwipeTop += (s, e) =>
        {
            DisplayAlert("Gesture Info", "Swipe Top Detected", "OK");
            ViewModel.SampleCommand.Execute("Swipe Top Detected");
        };

        gi.SwipeLeft += (s, e) =>
        {
            DisplayAlert("Gesture Info", "Swipe Left Detected", "OK");
            ViewModel.SampleCommand.Execute("Swipe Left Detected");
        };

        gi.SwipeRight += (s, e) =>
        {
            DisplayAlert("Gesture Info", "Swipe Right Detected", "OK");
            ViewModel.SampleCommand.Execute("Swipe Right Detected");
        };

        this.Content = gi;
Run Code Online (Sandbox Code Playgroud)


Dav*_*sus 6

供参考

SwipeView在 Xamarin.Forms 4.4 中可用。

SwipeView类还定义了四种事件:

SwipeStarted在开始滑动时触发。伴随此事件的 SwipeStartedEventArgs 对象具有 SwipeDirection 类型的 SwipeDirection 属性。

当滑动移动时触发SwipeChanging。伴随此事件的 SwipeChangingEventArgs 对象具有 SwipeDirection 类型的 SwipeDirection 属性和 double 类型的 Offset 属性。

当滑动结束时触发SwipeEnded。伴随此事件的 SwipeEndedEventArgs 对象具有 SwipeDirection 类型的 SwipeDirection 属性。

CloseRequested在滑动项关闭时触发。此外,SwipeView 定义了一个 Close 方法,用于关闭滑动项。

在此处输入图片说明

有关一些新的 Xamarin Forms 功能的详细信息,请访问此链接