using System;
|
using Android.Graphics;
|
using Android.Graphics.Drawables;
|
using Android.Runtime;
|
using Android.Views;
|
using Com.Hdl.Widget;
|
|
namespace Shared
|
{
|
|
/// <summary>
|
/// HDLDiyArcSeekBar 控件
|
/// 自定义开口角度圆弧控件,支持设置自定义拖动图片,更灵活扩展,用于空调页面和音乐等页面
|
/// </summary>
|
public class DiyArcSeekBar : View
|
{
|
/// <summary>
|
/// 当前视图
|
/// </summary>
|
/// <value>The HDLDiyArcSeekBar.</value>
|
HDLDiyArcSeekBar mHDLDiyArcSeekBar
|
{
|
get
|
{
|
return AndroidView as HDLDiyArcSeekBar;
|
}
|
set
|
{
|
AndroidView = value;
|
}
|
}
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public DiyArcSeekBar()
|
{
|
mHDLDiyArcSeekBar = new HDLDiyArcSeekBar(Application.Activity);
|
mOnProgressChangeListener = new OnProgressChangeListener(this);
|
mHDLDiyArcSeekBar.SetOnProgressChangeListener(mOnProgressChangeListener);
|
}
|
|
//internal static ProgressChangeListener:Com.Hdl.Widget.HDLDiyArcSeekBar.IOnProgressChangeListener(){
|
|
|
//}
|
|
|
/// <summary>
|
/// 进度值最大值
|
/// </summary>
|
/// <value>最大值</value>
|
public int MaxValue
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetMaxValue(value);
|
}
|
}
|
|
/// <summary>
|
/// 进度值最小值
|
/// </summary>
|
/// <value>最小值</value>
|
public int MinValue
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetMinValue(value);
|
}
|
}
|
|
/// <summary>
|
/// 当前进度值
|
/// </summary>
|
/// <value>进度值</value>
|
public int Progress
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.Progress = value;
|
}
|
|
get
|
{
|
|
return mHDLDiyArcSeekBar.Progress;
|
}
|
}
|
|
|
/// <summary>
|
/// 圆弧默认背景颜色
|
/// </summary>
|
/// <value>背景颜色</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.SetArcColor(Android.Graphics.Color.Argb(a, r, g, b));
|
}
|
}
|
|
/// <summary>
|
/// 进度条颜色 单一颜色不渐变
|
/// </summary>
|
/// <value>单一进度条颜色</value>
|
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));
|
}
|
|
}
|
|
/// <summary>
|
/// 圆弧宽
|
/// </summary>
|
/// <value>宽</value>
|
public int ArcWidth
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetArcWidth(value);
|
}
|
}
|
|
|
/// <summary>
|
/// 是否可以滑动
|
/// </summary>
|
/// <value>是否可以滑动</value>
|
public bool IsClickable
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetIsClickable(value);
|
}
|
}
|
|
/// <summary>
|
/// 设置进度条 渐变颜色的开始颜色和结束颜色
|
/// </summary>
|
/// <value>开始颜色、结束颜色</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);
|
|
}
|
|
/// <summary>
|
/// 开口角度
|
/// </summary>
|
public int OpenAngle
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetOpenAngle(value);
|
|
}
|
}
|
|
/// <summary>
|
/// 进度条与左右边框边距
|
/// </summary>
|
public int SeekBarPadding
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetSeekBarPadding(value);
|
}
|
}
|
|
|
|
/// <summary>
|
/// 拖动按钮图片高度
|
/// </summary>
|
public int ThumbImageHeight
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetThumbImgBtnWidth(value);
|
}
|
}
|
|
string thumbImagePath;
|
/// <summary>
|
/// 拖动按钮图片
|
/// </summary>
|
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);
|
}
|
}
|
|
|
/// <summary>
|
/// 是否离线 离线的话禁止滑动并绘制背景遮挡层
|
/// </summary>
|
/// <value>是否离线</value>
|
public bool IsOffline
|
{
|
set
|
{
|
mHDLDiyArcSeekBar.SetOffline(value);
|
}
|
}
|
|
/// <summary>
|
/// 离线效果时 进度条颜色 单一颜色不渐变
|
/// </summary>
|
/// <value>单一进度条颜色</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));
|
}
|
|
}
|
|
/// <summary>
|
/// 是否显示拖动按钮图片
|
/// </summary>
|
/// <value>是否离线</value>
|
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);
|
|
//}
|
|
|
|
/// <summary>
|
/// EventHandler
|
/// </summary>
|
public EventHandler<int> OnProgressChangedEvent;
|
public EventHandler<bool> OnStartTrackingTouchEvent;
|
public EventHandler<int> OnStopTrackingTouchEvent;
|
|
/// <summary>
|
/// OnProgressChangeListener 继承响应事件
|
/// </summary>
|
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);
|
|
}
|
}
|
}
|
}
|