NGraphics
NControl
w/आप मंच दाता बनाने या अपने प्रोजेक्ट में Skia
तरह पुस्तकालयों को जोड़ने के लिए की जरूरत के बिना अपने "पूर्णता मीटर" के एक "वेक्टर" संस्करण बना सकते हैं का उपयोग करना।
नोट: स्काईशर्प और अन्य देशी 2 डी/3 डी पुस्तकालय बहुत अच्छे हैं, लेकिन ऐप में बहुत अधिक ओवरहेड जोड़ें और यदि आपको उनकी सभी सुविधाओं की आवश्यकता नहीं है तो ब्लोट (ऐप आकार, मेमोरी उपयोग, प्रारंभिक समय आदि) ..) इसके लायक नहीं है (आईएमएचओ)।
पुन: https://github.com/praeclarum/NGraphics
मैं एक MultiSegmentProgressControl
कि मैं तुम्हें चाप ड्राइंग की मूल बातें दिखाने के लिए किया था नीचे छीन लिया। मैंने जो पूर्ण संस्करण किया है, वह आपको कई खंडों को जोड़ने और एनिमेट करने की अनुमति देता है, प्रतिशत प्रदर्शित करता है, स्पर्श पर ब्रेक-आउट सेगमेंट इत्यादि ...
NControl
का उपयोग करके आप स्पर्श तत्वों के साथ समग्र नियंत्रण बना सकते हैं, इसलिए यह आपके ऊपर है आपको इसे कितना दूर लेना है।
पुन: https://github.com/chrfalch/NControl
public class MultiSegmentProgressControl2 : NControlView
{
double ringWidth = 50;
double ringInnerWidth = 100;
SolidBrush redBush = new SolidBrush(Colors.Red);
RadialGradientBrush redSegmentBrush = new RadialGradientBrush(
new Point(0.5, 0.5),
new Size(.75, .75),
Colors.LightGray,
Colors.Red);
SolidBrush blueBush = new SolidBrush(Colors.Blue);
RadialGradientBrush blueSegmentBrush = new RadialGradientBrush(
new Point(0.5, 0.5),
new Size(.75, .75),
Colors.LightGray,
Colors.Green);
Tuple<double, double> _redSegment;
public Tuple<double, double> RedSegment { get { return _redSegment; } set { _redSegment = value; Invalidate(); } }
Tuple<double, double> _greenSegment;
public Tuple<double, double> GreenSegment { get { return _greenSegment; } set { _greenSegment = value; Invalidate(); } }
public override void Draw(ICanvas canvas, Rect rect)
{
canvas.FillEllipse(rect.TopLeft, rect.Size, Colors.Gray);
var n = rect;
n.X += ringWidth;
n.Y = n.X;
n.Width -= ringWidth * 2;
n.Height = n.Width;
var i = n;
canvas.FillEllipse(n.TopLeft, n.Size, Colors.LightGray);
n.X += ringInnerWidth;
n.Y = n.X;
n.Width -= ringInnerWidth * 2;
n.Height = n.Width;
canvas.FillEllipse(n.TopLeft, n.Size, Colors.White);
var r = rect.Width/2;
DrawSegment(canvas, rect, ringWidth, redBush, r, _redSegment.Item1, _redSegment.Item2);
DrawSegment(canvas, i, ringInnerWidth, redSegmentBrush, r - ringWidth, _redSegment.Item1, _redSegment.Item2);
DrawSegment(canvas, rect, ringWidth, blueBush, r, _greenSegment.Item1, _greenSegment.Item2);
DrawSegment(canvas, i, ringInnerWidth, blueSegmentBrush, r - ringWidth, _greenSegment.Item1, _greenSegment.Item2);
}
void DrawSegment(ICanvas canvas, Rect rect, double width, Brush brush, double r, double s, double f)
{
canvas.DrawPath(new PathOp[]{
new MoveTo(SegmentEdgePoint(rect.Center, r, s)),
new ArcTo(new Size(rect.Height/2, rect.Width/2), false, true, SegmentEdgePoint(rect.Center, r, f)),
new LineTo(SegmentEdgePoint(rect.Center, r - width, f)),
new ArcTo(new Size(r, r), false, false, SegmentEdgePoint(rect.Center, r - width, s)),
new LineTo(SegmentEdgePoint(rect.Center, r, s)),
new ClosePath()
}, null, brush);
}
Point SegmentEdgePoint(Point c, double r, double d)
{
return new Point(
c.X + r * Math.Cos(d * Math.PI/180),
c.Y + r * Math.Sin(d * Math.PI/180)
);
}
}
जब NGraphics
का उपयोग कर रहा अत्यधिक NGraphics.Editor
या एक Xamarin 'कार्यपुस्तिका का उपयोग कर सहभागी अपने नियंत्रण डिजाइन करने के लिए सलाह देते हैं:
मैं निश्चित रूप से होगा विभिन्न छवियों के लिए जाओ, यह लागू करने और अच्छा करने के लिए आसान है और रखरखाव के मामले में साफ। नुकसान यह है कि यदि आपको एक नई प्रक्रिया की आवश्यकता है, तो आपको छवियों को फिर से बनाना होगा (अधिकतर यदि सभी नहीं)। लेकिन आईएमओ, यह कस्टम प्रस्तुतकर्ताओं के साथ इस तरह के एक जटिल नियंत्रण के निर्माण के लिए बहुत से काम से बेहतर है। –
सबसे आसान तरीका विभिन्न छवियों और इसके आसान रखरखाव को बनाना है ... यदि आप इसे कठिन तरीके से चाहते हैं, तो आप 2 डी ड्राइंग के लिए SkiaSharp को आजमा सकते हैं https://developer.xamarin.com/guides/cross-platform/drawing/ –
@ डेनिसस्क्रॉयर यही मेरा पहला विचार था। लेकिन तब मुझे याद आया कि इस तरह के Jquery में एक नियंत्रण था। तो, मैंने सोचा, मैं कोशिश कर सकता हूँ। प्लस छवि विभिन्न मोबाइल उपकरणों के संकल्प परिवर्तन के साथ मुश्किल हो सकती है। मैं बस एक संभावित समाधान की तलाश में हूं। अन्यथा, मैं स्पष्ट रूप से केवल छवियों को करूँगा क्योंकि यह सबसे अजीब तरीका प्रतीत होता है। – jitendragarg