Skip to content

Instantly share code, notes, and snippets.

@ianschmitz
Last active November 9, 2016 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ianschmitz/6ac39073c4bd8172b59a0eec57336ed6 to your computer and use it in GitHub Desktop.
Save ianschmitz/6ac39073c4bd8172b59a0eec57336ed6 to your computer and use it in GitHub Desktop.
Xamarin Slider Up/Down events
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace NativeApp
{
public class ExtendedSlider : Slider
{
public event EventHandler TouchDown;
public event EventHandler TouchUpInside;
public event EventHandler TouchUpOutside;
public void OnTouchDown(EventArgs e)
{
TouchDown?.Invoke(this, e);
}
public void OnTouchUpInside(EventArgs e)
{
TouchUpInside?.Invoke(this, e);
}
public void OnTouchUpOutside(EventArgs e)
{
TouchUpOutside?.Invoke(this, e);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using NativeApp;
using NativeApp.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(ExtendedSlider), typeof(ExtendedSliderRenderer))]
namespace NativeApp.Droid
{
public class ExtendedSliderRenderer : SliderRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Touch += Control_Touch;
}
}
private void Control_Touch(object sender, TouchEventArgs e)
{
var slider = Element as ExtendedSlider;
if (e.Event.Action == MotionEventActions.Up)
{
slider.OnTouchUpInside(e);
}
else if (e.Event.Action == MotionEventActions.Outside)
{
// Doesn't seem to fire
slider.OnTouchUpOutside(e);
}
else if (e.Event.Action == MotionEventActions.Down)
{
slider.OnTouchDown(e);
}
e.Handled = false;
}
}
}
using NativeApp;
using NativeApp.iOS;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(ExtendedSlider), typeof(ExtendedSliderRenderer))]
namespace NativeApp.iOS
{
public class ExtendedSliderRenderer : SliderRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.TouchDown += Control_TouchDown;
Control.TouchUpInside += Control_TouchUpInside;
Control.TouchUpOutside += Control_TouchUpOutside;
}
}
private void Control_TouchDown(object sender, EventArgs e)
{
var slider = Element as ExtendedSlider;
slider.OnTouchDown(e);
}
private void Control_TouchUpInside(object sender, EventArgs e)
{
var slider = Element as ExtendedSlider;
slider.OnTouchUpInside(e);
}
private void Control_TouchUpOutside(object sender, EventArgs e)
{
var slider = Element as ExtendedSlider;
slider.OnTouchUpOutside(e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment