所以我正在编写一个Xamarin.Forms应用程序。我有一个音量滑块,需要在值更改时向设备发送音量命令。由于卷是通过TCP连接发送的,并且必须由设备进行验证,并且设备可能并不总是实时响应(并且正在监视变化以及双向通信),因此连续滑块不合适。我只希望在用户放开拇指时触发ValueChanged事件。我在iOS上创建了一个自定义渲染器来覆盖OnElementChanged并将滑块的连续属性设置为false:
protected override void OnElementChanged(ElementChangedEventArgs<Slider> e) {
base.OnElementChanged(e);
if (Control == null) return;
Control.MinimumTrackTintColor = UIColor.FromRGB(0xE6, 0x00, 0x06);
Control.Continuous = false;
}
这就像一个魅力。我想为Android做类似的事情,但我似乎无法弄清楚如何做到这一点。是否有我可以在ProgressDrawable控件上调用的等效标志或函数来获取此行为?
答案 0 :(得分:3)
因此,Android上的Xamarin.Forms Slider
为SeekBar
,因此您希望更新Slider
事件与StopTrackingTouch
事件ProgressChanged
的值{1}}事件(这是默认SliderRenderer
的正常行为。
因此,在您的自定义SliderRenderer
中,您可以覆盖ProgressChanged
事件(替换默认的SliderRenderer
事件)并将ProgressValue保存到类级别的var。
然后覆盖(添加)StopTrackingTouch
事件,然后将表单“Slider.Value
设置为您在ProgressChanged
事件中保存在本地var中的值。
ProgressChanged:https://developer.xamarin.com/api/event/Android.Widget.SeekBar.ProgressChanged/
StopTrackingTouch:https://developer.xamarin.com/api/event/Android.Widget.SeekBar.StopTrackingTouch/