using System; using Shared.IOS.TBL; namespace Shared { /// /// HDLWaveSeekbar 控件 /// public class WaveSeekBar : BaseSeekBar { /// /// 当前视图 /// /// The HDLWaveSeekbar. HDLWaveSeekbar mHDLWaveSeekbar { get { return uiView as HDLWaveSeekbar; } set { uiView = value; } } /// /// 构造函数 /// public WaveSeekBar() { mHDLWaveSeekbar = new HDLWaveSeekbar { MProgressChangedDelegate = new OnProgressChangeListener(this) }; } /// /// 刷新布局 /// private void RefreshFrame() { mHDLWaveSeekbar.InitWithFrameWaveSeekBar(new CoreGraphics.CGRect(base.X, base.Y, base.Width, base.Height)); } /// /// 控件宽度 /// public override int Width { get { return base.Width; } set { base.Width = value; RefreshFrame(); } } /// /// 控件的高度 /// public override int Height { get { return base.Height; } set { base.Height = value; RefreshFrame(); } } /// /// 控件的X坐标 /// public override int X { get { return base.X; } set { base.X = value; RefreshFrame(); } } /// /// 控件的X坐标 /// public override int Y { get { return base.Y; } set { base.Y = value; RefreshFrame(); } } /// /// 进度值显示单位 /// /// 单位字符 public String ProgressBarUnitSring { set { mHDLWaveSeekbar.SetProgressBarUnitSring(value); } } int minValue = 0; int maxValue = 100; /// /// 进度值最大值 /// /// 最大值 public int MaxValue { set { maxValue = value; mHDLWaveSeekbar.SetMinAndMaxValue(minValue, maxValue); } } /// /// 进度值最小值 /// /// 最小值 public int MinValue { set { minValue = value; mHDLWaveSeekbar.SetMinAndMaxValue(minValue, maxValue); } } /// /// 当前进度值 /// /// 进度值 public int Progress { set { mHDLWaveSeekbar.SetProgress(value); } get { return (int)mHDLWaveSeekbar.MProgress; } } /// /// 背景边框宽度 /// /// 半径 public int WaveBorderWidth { set { mHDLWaveSeekbar.SetBorderWidth(value); } } ///// ///// 波浪进度颜色 ///// ///// 波浪进度颜色 //public uint WaveColor //{ // set // { // byte r, g, b, a; // r = (byte)(value / 256 / 256 % 256); // g = (byte)(value / 256 % 256); // b = (byte)(value % 256); // a = (byte)(value / 256 / 256 / 256 % 256); // mHDLWaveSeekbar.MWaveProgressBarColor = UIKit.UIColor.FromRGBA(r, g, b, a); // mHDLWaveSeekbar.SetNeedsDisplay(); // } //} /// /// 设置进度条 渐变颜色的开始颜色和结束颜色 /// /// 开始颜色、结束颜色 public void SetProgressBarColors(uint startColor, uint endColor) { byte r, g, b, a; r = (byte)(startColor / 256 / 256 % 256); g = (byte)(startColor / 256 % 256); b = (byte)(startColor % 256); a = (byte)(startColor / 256 / 256 / 256 % 256); var start = UIKit.UIColor.FromRGBA(r, g, b, a); byte r2, g2, b2, a2; r2 = (byte)(endColor / 256 / 256 % 256); g2 = (byte)(endColor / 256 % 256); b2 = (byte)(endColor % 256); a2 = (byte)(endColor / 256 / 256 / 256 % 256); var end = UIKit.UIColor.FromRGBA(r2, g2, b2, a2); mHDLWaveSeekbar.SetProgressBarColors(start, end); mHDLWaveSeekbar.SetNeedsDisplay(); } /// /// 背景边框颜色 /// /// 背景边框颜色 public uint WaveBorderColor { set { byte r, g, b, a; r = (byte)(value / 256 / 256 % 256); g = (byte)(value / 256 % 256); b = (byte)(value % 256); a = (byte)(value / 256 / 256 / 256 % 256); mHDLWaveSeekbar.MWaveBorderColor = UIKit.UIColor.FromRGBA(r, g, b, a); mHDLWaveSeekbar.SetNeedsDisplay(); } } /// /// 圆角 /// /// 圆角 public int CornerRadius { set { mHDLWaveSeekbar.MCornerRadius = value; } } /// /// 进度条与边框边距 /// /// 半径 public int WavePadding { set { mHDLWaveSeekbar.SetWavePadding(value); } } /// /// 当前进度值显示的文字颜色 /// /// 文字颜色 public uint ProgressTextColor { set { byte r, g, b, a; r = (byte)(value / 256 / 256 % 256); g = (byte)(value / 256 % 256); b = (byte)(value % 256); a = (byte)(value / 256 / 256 / 256 % 256); mHDLWaveSeekbar.MProgressTextColor = UIKit.UIColor.FromRGBA(r, g, b, a); } } /// /// 当前进度值显示的文字大小 /// /// 文字大小 public int ProgressTextSize { set { mHDLWaveSeekbar.MProgressTextSize = value; } } /// /// 是否可以滑动 /// /// 是否可以滑动 public bool IsClickable { set { mHDLWaveSeekbar.IsClickable = value; } } /// /// 是否显示进度文字 /// /// 是否显示进度文字 public bool IsProgressTextShow { set { mHDLWaveSeekbar.IsProgressTextShow = value; mHDLWaveSeekbar.SetNeedsDisplay(); } } /// /// 当前进度值 Y坐标 /// /// Y坐标 public int NowProgressY { get { return (int)mHDLWaveSeekbar.ProgressY; } } /// /// EventHandler /// public EventHandler OnProgressChangedEvent; public EventHandler OnStartTrackingTouchEvent; public EventHandler OnStopTrackingTouchEvent; ///// ///// OnProgressChangeListener 继承响应事件 ///// OnProgressChangeListener mOnProgressChangeListener; public class OnProgressChangeListener : HDLWaveSeekbarProgressChangedDelegate { [Weak] WaveSeekBar _WaveSeekBar; public OnProgressChangeListener(WaveSeekBar view) { _WaveSeekBar = view; } public override void OnProgressChanged(int mProgress) { //if (_WaveSeekBar.IsProgressChangeDelay()) return; _WaveSeekBar.OnProgressChangedEvent?.Invoke(this, mProgress); } public override void OnStartTrackingTouch() { _WaveSeekBar.OnStartTrackingTouchEvent?.Invoke(this, true); } public override void OnStopTrackingTouch(int mProgress) { _WaveSeekBar.OnProgressChangedEvent?.Invoke(this, mProgress); _WaveSeekBar.OnStopTrackingTouchEvent?.Invoke(this, mProgress); } } } }