Xamarin Forms Swipe Left/Swipe Right Gestures
No need third party libraries.. No need to pay.. Just add these two classes & Implement your swipe listeners
Step 1: Copy paste these two classes
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;
}
}
}
}
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);
}
}
Step 2: From your Xamarin forms pass the view & also interface obj. Then you get result
In my case I pass the label
SwipeListener swipeListener = new SwipeListener(lbl_swipe, this);
Step 3: Implement the ISwipeCallBack interface
public partial class SwipeLibPage : ContentPage, ISwipeCallBack
Sample project --> https://github.com/rranjithkumar100/Xamarin-Swipe-Library
Xamarin.Forms has introduced SwipeGestureRecognizer :
<BoxView Color="Teal" ...>
<BoxView.GestureRecognizers>
<SwipeGestureRecognizer Direction="Left" Swiped="OnSwiped"/>
</BoxView.GestureRecognizers>
</BoxView>
You can always have a look at this simple demo. And use it as follows:
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;