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);
}
}
}
}