using System; using Shared.IO; using Shared.IOS.TBL; using UIKit; namespace Shared { /// /// HDLDiyArcSeekBar 控件 /// public class DiyArcSeekBar : View { /// /// 当前视图 /// /// The HDLDiyArcSeekBar. HDLDiyArcSeekbar mHDLDiyArcSeekBar { get { return uiView as HDLDiyArcSeekbar; } set { uiView = value; } } /// /// 构造函数 /// public DiyArcSeekBar() { mHDLDiyArcSeekBar = new HDLDiyArcSeekbar { MProgressChangedDelegate = new OnProgressChangeListener(this) }; } /// /// 刷新布局 /// private void RefreshFrame() { mHDLDiyArcSeekBar.InitWithFrameSeekBar(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(); } } int minValue = 0; int maxValue = 100; /// /// 进度值最大值 /// /// 最大值 public int MaxValue { set { maxValue = value; mHDLDiyArcSeekBar.SetMinAndMaxValue(minValue, maxValue); } } /// /// 进度值最小值 /// /// 最小值 public int MinValue { set { minValue = value; mHDLDiyArcSeekBar.SetMinAndMaxValue(minValue, maxValue); } } /// /// 当前进度值 /// /// 进度值 public int Progress { set { mHDLDiyArcSeekBar.SetProgress(value); } get { return (int)mHDLDiyArcSeekBar.MProgressCurrentValue; } } /// /// 同时设置圆弧和拖动圆形的宽 /// /// public int ArcWidthWithDefaultStyle { set { mHDLDiyArcSeekBar.MArcWidth = value; } } /// /// 圆弧默认背景颜色 /// /// 背景颜色 public uint ArcColor { 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); mHDLDiyArcSeekBar.MArcBackBarColor = UIKit.UIColor.FromRGBA(r, g, b, a); } } /// /// 进度条颜色 单一颜色不渐变 /// /// 单一进度条颜色 public uint ProgressBarColor { set { //mHDLDiyArcSeekBar.SetProgressBarColor(value); 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); mHDLDiyArcSeekBar.SetProgressBarColor(UIKit.UIColor.FromRGBA(r, g, b, a)); } } /// /// 圆弧宽 /// /// public int ArcWidth { set { mHDLDiyArcSeekBar.SetArcWidth(value); } } /// /// 是否可以滑动 /// /// 是否可以滑动 public bool IsClickable { set { mHDLDiyArcSeekBar.IsClickable = value; } } /// /// 设置进度条 渐变颜色的开始颜色和结束颜色 /// /// 开始颜色、结束颜色 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); mHDLDiyArcSeekBar.SetProgressBarColors(start, end); } /// /// 开口角度 /// public int OpenAngle { set { mHDLDiyArcSeekBar.SetOpenAngle(value); mHDLDiyArcSeekBar.SetNeedsDisplay(); } } /// /// 进度条与左右边框边距 /// public int SeekBarPadding { set { mHDLDiyArcSeekBar.SetSeekBarPadding(value); } } /// /// 拖动按钮图片高度 /// public int ThumbImageHeight { set { mHDLDiyArcSeekBar.SetThumbImgBtnWidth(value); } } string thumbImagePath; /// /// 拖动按钮图片 /// public string ThumbImagePath { get { return thumbImagePath; } set { thumbImagePath = value; var bitmap = UIImage.FromFile(FileUtils.GetImageFilePath(thumbImagePath)); if (bitmap == null) return; mHDLDiyArcSeekBar.SetThumbImgBtnImg(bitmap); } } /// /// 是否离线 离线的话禁止滑动并绘制背景遮挡层 /// /// 是否离线 public bool IsOffline { set { mHDLDiyArcSeekBar.SetOffline(value); } } /// /// 离线效果时 进度条颜色 单一颜色不渐变 /// /// 单一进度条颜色 public uint OfflineProgressBarColor { set { //mHDLDiyArcSeekBar.SetProgressBarColor(value); 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); mHDLDiyArcSeekBar.SetOfflineProgressBarColor(UIKit.UIColor.FromRGBA(r, g, b, a)); } } /// /// 是否显示拖动按钮图片 /// /// 是否离线 public bool IsThumbImgBtnShow { set { mHDLDiyArcSeekBar.SetThumbImgBtnShow(value); } } /// /// EventHandler /// public EventHandler OnProgressChangedEvent; public EventHandler OnStartTrackingTouchEvent; public EventHandler OnStopTrackingTouchEvent; ///// ///// OnProgressChangeListener 继承响应事件 ///// OnProgressChangeListener mOnProgressChangeListener; public class OnProgressChangeListener : HDLSeekBarProgressChangedDelegate { [Weak] DiyArcSeekBar _DiyArcSeekBar; public OnProgressChangeListener(DiyArcSeekBar view) { _DiyArcSeekBar = view; } public override void OnProgressChanged(int mProgress) { _DiyArcSeekBar.OnProgressChangedEvent?.Invoke(this, mProgress); } public override void OnStartTrackingTouch() { _DiyArcSeekBar.OnStartTrackingTouchEvent?.Invoke(this, true); } public override void OnStopTrackingTouch(int mProgress) { _DiyArcSeekBar.OnStopTrackingTouchEvent?.Invoke(this, mProgress); } } } }