using System;
|
using Com.Hdl.Widget;
|
|
namespace Shared
|
{
|
|
/// <summary>
|
/// HDLWaveSeekBar 波浪滑动控件
|
/// </summary>
|
public class WaveSeekBar : BaseSeekBar
|
{
|
/// <summary>
|
/// 当前视图
|
/// </summary>
|
/// <value>The HDLWaveSeekBar.</value>
|
HDLWaveSeekBar mHDLWaveSeekBar
|
{
|
get
|
{
|
return AndroidView as HDLWaveSeekBar;
|
}
|
set
|
{
|
AndroidView = value;
|
}
|
}
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public WaveSeekBar()
|
{
|
mHDLWaveSeekBar = new HDLWaveSeekBar(Application.Activity);
|
mOnProgressChangeListener = new OnProgressChangeListener(this);
|
mHDLWaveSeekBar.SetOnProgressChangeListener(mOnProgressChangeListener);
|
}
|
|
/// <summary>
|
/// 进度值显示单位
|
/// </summary>
|
/// <value>单位字符</value>
|
public String ProgressBarUnitSring
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetProgressBarUnitSring(value);
|
}
|
}
|
|
/// <summary>
|
/// 进度值最大值
|
/// </summary>
|
/// <value>最大值</value>
|
public int MaxValue
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetMaxValue(value);
|
}
|
}
|
|
/// <summary>
|
/// 进度值最小值
|
/// </summary>
|
/// <value>最小值</value>
|
public int MinValue
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetMinValue(value);
|
}
|
}
|
|
/// <summary>
|
/// 当前进度值
|
/// </summary>
|
/// <value>进度值</value>
|
public int Progress
|
{
|
set
|
{
|
mHDLWaveSeekBar.Progress = value;
|
}
|
|
get
|
{
|
return mHDLWaveSeekBar.Progress;
|
}
|
}
|
|
|
|
/// <summary>
|
/// 当前进度值显示的文字颜色
|
/// </summary>
|
/// <value>文字颜色</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.SetProgressTextColor(Android.Graphics.Color.Argb(a, r, g, b));
|
}
|
}
|
|
/// <summary>
|
/// 当前进度值显示的文字大小
|
/// </summary>
|
/// <value>文字大小</value>
|
public int ProgressTextSize
|
{
|
set => mHDLWaveSeekBar.SetProgressTextSize(value);
|
}
|
|
/// <summary>
|
/// 是否可以滑动
|
/// </summary>
|
/// <value>是否可以滑动</value>
|
public bool IsClickable
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetIsClickable(value);
|
}
|
}
|
|
/// <summary>
|
/// 是否可以滑动
|
/// </summary>
|
/// <value>是否可以滑动</value>
|
public bool IsProgressTextShow
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetProgressTextShow(value);
|
|
}
|
}
|
|
|
/// <summary>
|
/// 背景边框宽度
|
/// </summary>
|
/// <value>半径</value>
|
public int WaveBorderWidth
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetBorderWidth(value);
|
}
|
}
|
|
/// <summary>
|
/// 圆角
|
/// </summary>
|
/// <value>圆角</value>
|
public int CornerRadius
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetCornerRadius(value);
|
}
|
}
|
|
///// <summary>
|
///// 波浪进度颜色
|
///// </summary>
|
///// <value>波浪进度颜色</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.SetWaveColor(Android.Graphics.Color.Argb(a, r, g, b));
|
// mHDLWaveSeekBar.PostInvalidate();
|
// }
|
//}
|
|
|
/// <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 };
|
mHDLWaveSeekBar.SetProgressBarColors(mArcColors);
|
mHDLWaveSeekBar.PostInvalidate();
|
|
}
|
|
/// <summary>
|
/// 背景边框颜色
|
/// </summary>
|
/// <value>背景边框颜色</value>
|
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.SetWaveBorderColor(Android.Graphics.Color.Argb(a, r, g, b));
|
mHDLWaveSeekBar.PostInvalidate();
|
}
|
}
|
|
|
/// <summary>
|
/// 进度条与边框边距
|
/// </summary>
|
/// <value>半径</value>
|
public int WavePadding
|
{
|
set
|
{
|
mHDLWaveSeekBar.SetWavePadding(value);
|
}
|
}
|
|
/// <summary>
|
/// 当前进度值 Y坐标
|
/// </summary>
|
/// <value>Y坐标</value>
|
public int NowProgressY
|
{
|
get
|
{
|
return (int)mHDLWaveSeekBar.ProgressY;
|
}
|
}
|
|
|
////默认 300毫秒
|
//private int DelayTime = 300;
|
////上一次Change时间
|
//DateTime delayDateTime = DateTime.MinValue;
|
//public int ProgressChangeDelayTime
|
//{
|
// get
|
// {
|
// return DelayTime;
|
// }
|
// set
|
// {
|
// DelayTime = value;
|
// }
|
//}
|
|
///// <summary>
|
///// 判断是否屏蔽
|
///// </summary>
|
//public bool IsProgressChangeDelay()
|
//{
|
// if ((DateTime.Now - delayDateTime).TotalMilliseconds < DelayTime)
|
// {
|
// return true;
|
// }
|
// delayDateTime = DateTime.Now;
|
// return false;
|
//}
|
|
|
|
//uint thumbColor = 0xFFFFFFFF;
|
///// <summary>
|
///// 拖动按钮圆形颜色
|
///// </summary>
|
///// <value>拖动按钮颜色</value>
|
//public uint ThumbColor
|
//{
|
// get
|
// {
|
// return thumbColor;
|
// }
|
// set
|
// {
|
// thumbColor = value;
|
|
// byte r, g, b, a;
|
// r = (byte)(thumbColor / 256 / 256 % 256);
|
// g = (byte)(thumbColor / 256 % 256);
|
// b = (byte)(thumbColor % 256);
|
// a = (byte)(thumbColor / 256 / 256 / 256 % 256);
|
|
// mHDLWaveSeekBar.SetThumbColor(Android.Graphics.Color.Argb(a, r, g, b));
|
// }
|
//}
|
|
|
|
|
/// <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, HDLWaveSeekBar.IOnProgressChangeListener
|
{
|
|
WaveSeekBar _WaveSeekBar;
|
|
public OnProgressChangeListener(WaveSeekBar view)
|
{
|
_WaveSeekBar = view;
|
}
|
|
public void OnProgressChanged(HDLWaveSeekBar p0, int p1, bool p2)
|
{
|
//if (_WaveSeekBar.IsProgressChangeDelay()) return;
|
_WaveSeekBar.OnProgressChangedEvent?.Invoke(this, p0.Progress);
|
}
|
|
public void OnStartTrackingTouch(HDLWaveSeekBar p0)
|
{
|
_WaveSeekBar.OnStartTrackingTouchEvent?.Invoke(this, true);
|
}
|
|
public void OnStopTrackingTouch(HDLWaveSeekBar p0)
|
{
|
_WaveSeekBar.OnProgressChangedEvent?.Invoke(this, p0.Progress);
|
_WaveSeekBar.OnStopTrackingTouchEvent?.Invoke(this, p0.Progress);
|
|
}
|
}
|
}
|
}
|