using System; using Android.Graphics; using Android.Graphics.Drawables; using Android.Runtime; using Android.Views; using Com.Hdl.Widget; namespace Shared { /// /// HDLDiyArcSeekBar 控件 /// 自定义开口角度圆弧控件,支持设置自定义拖动图片,更灵活扩展,用于空调页面和音乐等页面 /// public class DiyArcSeekBar : View { /// /// 当前视图 /// /// The HDLDiyArcSeekBar. HDLDiyArcSeekBar mHDLDiyArcSeekBar { get { return AndroidView as HDLDiyArcSeekBar; } set { AndroidView = value; } } /// /// 构造函数 /// public DiyArcSeekBar() { mHDLDiyArcSeekBar = new HDLDiyArcSeekBar(Application.Activity); mOnProgressChangeListener = new OnProgressChangeListener(this); mHDLDiyArcSeekBar.SetOnProgressChangeListener(mOnProgressChangeListener); } //internal static ProgressChangeListener:Com.Hdl.Widget.HDLDiyArcSeekBar.IOnProgressChangeListener(){ //} /// /// 进度值最大值 /// /// 最大值 public int MaxValue { set { mHDLDiyArcSeekBar.SetMaxValue(value); } } /// /// 进度值最小值 /// /// 最小值 public int MinValue { set { mHDLDiyArcSeekBar.SetMinValue(value); } } /// /// 当前进度值 /// /// 进度值 public int Progress { set { mHDLDiyArcSeekBar.Progress = value; } get { return mHDLDiyArcSeekBar.Progress; } } /// /// 圆弧默认背景颜色 /// /// 背景颜色 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.SetArcColor(Android.Graphics.Color.Argb(a, r, g, b)); } } /// /// 进度条颜色 单一颜色不渐变 /// /// 单一进度条颜色 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(Android.Graphics.Color.Argb(a, r, g, b)); } } /// /// 圆弧宽 /// /// public int ArcWidth { set { mHDLDiyArcSeekBar.SetArcWidth(value); } } /// /// 是否可以滑动 /// /// 是否可以滑动 public bool IsClickable { set { mHDLDiyArcSeekBar.SetIsClickable(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 = Android.Graphics.Color.Argb(a, r, g, b); 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 = Android.Graphics.Color.Argb(a2, r2, g2, b2); int[] mArcColors = { start, end }; mHDLDiyArcSeekBar.SetProgressBarColors(mArcColors); } /// /// 开口角度 /// public int OpenAngle { set { mHDLDiyArcSeekBar.SetOpenAngle(value); } } /// /// 进度条与左右边框边距 /// 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 mDrawable = this.getDrawable(thumbImagePath); if (mDrawable == null) return; BitmapDrawable mBitmapDrawable = (BitmapDrawable)mDrawable; if (mBitmapDrawable == null) return; Bitmap bitmap = mBitmapDrawable.Bitmap; if (bitmap == null) return; mHDLDiyArcSeekBar.SetThumbImgBtnImg(bitmap); } } /// /// 是否离线 离线的话禁止滑动并绘制背景遮挡层 /// /// 是否离线 public bool IsOffline { set { mHDLDiyArcSeekBar.SetOffline(value); } } /// /// 离线效果时 进度条颜色 单一颜色不渐变 /// /// 单一进度条颜色 public uint OfflineProgressBarColor { 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.SetProgressBarOfflineColors(Android.Graphics.Color.Argb(a, r, g, b)); } } /// /// 是否显示拖动按钮图片 /// /// 是否离线 public bool IsThumbImgBtnShow { set { mHDLDiyArcSeekBar.SetThumbImgBtnShow(value); } } //public void SetArcColors(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 = Android.Graphics.Color.Argb(a, r, g, b); // 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 = Android.Graphics.Color.Argb(a2, r2, g2, b2); // int[] mArcColors = { start, end, end }; // mHDLDiyArcSeekBar.SetArcColors(mArcColors); //} /// /// EventHandler /// public EventHandler OnProgressChangedEvent; public EventHandler OnStartTrackingTouchEvent; public EventHandler OnStopTrackingTouchEvent; /// /// OnProgressChangeListener 继承响应事件 /// OnProgressChangeListener mOnProgressChangeListener; public class OnProgressChangeListener : Java.Lang.Object, HDLDiyArcSeekBar.IOnProgressChangeListener { DiyArcSeekBar _DiyArcSeekBar; public OnProgressChangeListener(DiyArcSeekBar view) { _DiyArcSeekBar = view; } public void OnProgressChanged(HDLDiyArcSeekBar p0, int p1, bool p2) { _DiyArcSeekBar.OnProgressChangedEvent?.Invoke(this, p0.Progress); } public void OnStartTrackingTouch(HDLDiyArcSeekBar p0) { _DiyArcSeekBar.OnStartTrackingTouchEvent?.Invoke(this, true); } public void OnStopTrackingTouch(HDLDiyArcSeekBar p0) { //if (_DiyArcSeekBar.OnStopTrackingTouchEvent != null) //{ // _DiyArcSeekBar.OnStopTrackingTouchEvent(this, p0.Progress); //} _DiyArcSeekBar.OnStopTrackingTouchEvent?.Invoke(this, p0.Progress); } } } }