School Commit Init
This commit is contained in:
+115
@@ -0,0 +1,115 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace TechTitans.Views.Components
|
||||
{
|
||||
public class PiechartDrawble : BindableObject, IDrawable
|
||||
{
|
||||
public static readonly BindableProperty ProgressProperty = BindableProperty.Create(nameof(Progress), typeof(float), typeof(PiechartDrawble));
|
||||
public static readonly BindableProperty SizeProperty = BindableProperty.Create(nameof(Size), typeof(int), typeof(PiechartDrawble));
|
||||
public static readonly BindableProperty ThicknessProperty = BindableProperty.Create(nameof(Thickness), typeof(int), typeof(PiechartDrawble));
|
||||
public static readonly BindableProperty ProgressColorProperty = BindableProperty.Create(nameof(ProgressColor), typeof(Color), typeof(PiechartDrawble));
|
||||
public static readonly BindableProperty ProgressLeftColorProperty = BindableProperty.Create(nameof(ProgressLeftColor), typeof(Color), typeof(PiechartDrawble));
|
||||
public static readonly BindableProperty TextColorProperty = BindableProperty.Create(nameof(TextColor), typeof(Color), typeof(PiechartDrawble));
|
||||
|
||||
public float Progress
|
||||
{
|
||||
get => (float)GetValue(ProgressProperty);
|
||||
set => SetValue(ProgressProperty, value);
|
||||
}
|
||||
|
||||
public int Size
|
||||
{
|
||||
get { return (int)GetValue(SizeProperty); }
|
||||
set { SetValue(SizeProperty, value); }
|
||||
}
|
||||
|
||||
public int Thickness
|
||||
{
|
||||
get { return (int)GetValue(ThicknessProperty); }
|
||||
set { SetValue(ThicknessProperty, value); }
|
||||
}
|
||||
|
||||
public Color ProgressColor
|
||||
{
|
||||
get { return (Color)GetValue(ProgressColorProperty); }
|
||||
set { SetValue(ProgressColorProperty, value); }
|
||||
}
|
||||
|
||||
public Color ProgressLeftColor
|
||||
{
|
||||
get { return (Color)GetValue(ProgressLeftColorProperty); }
|
||||
set { SetValue(ProgressLeftColorProperty, value); }
|
||||
}
|
||||
|
||||
public Color TextColor
|
||||
{
|
||||
get { return (Color)GetValue(TextColorProperty); }
|
||||
set { SetValue(TextColorProperty, value); }
|
||||
}
|
||||
|
||||
public void Draw(ICanvas canvas, RectF dirtyRect)
|
||||
{
|
||||
float effectiveSize = Size - Thickness;
|
||||
float x = Thickness / 2;
|
||||
float y = Thickness / 2;
|
||||
|
||||
if (Progress < 0)
|
||||
{
|
||||
Progress = 0;
|
||||
}
|
||||
else if (Progress > 100)
|
||||
{
|
||||
Progress = 100;
|
||||
}
|
||||
|
||||
if (Progress < 100)
|
||||
{
|
||||
float angle = GetAngle(Progress);
|
||||
|
||||
canvas.StrokeColor = ProgressLeftColor;
|
||||
canvas.StrokeSize = Thickness;
|
||||
canvas.DrawEllipse(x, y, effectiveSize, effectiveSize);
|
||||
|
||||
// Draw arc
|
||||
canvas.StrokeColor = ProgressColor;
|
||||
canvas.StrokeSize = Thickness;
|
||||
canvas.DrawArc(x, y, effectiveSize, effectiveSize, 90, angle, true, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw circle
|
||||
canvas.StrokeColor = ProgressColor;
|
||||
canvas.StrokeSize = Thickness;
|
||||
canvas.DrawEllipse(x, y, effectiveSize, effectiveSize);
|
||||
}
|
||||
|
||||
// Make the percentage always the same size in relation to the size of the progress bar
|
||||
}
|
||||
|
||||
private float GetAngle(float progress)
|
||||
{
|
||||
float factor = 90f / 25f;
|
||||
|
||||
if (progress > 75)
|
||||
{
|
||||
return -180 - ((progress - 75) * factor);
|
||||
}
|
||||
else if (progress > 50)
|
||||
{
|
||||
return -90 - ((progress - 50) * factor);
|
||||
}
|
||||
else if (progress > 25)
|
||||
{
|
||||
return 0 - ((progress - 25) * factor);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 90 - (progress * factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user