public static void Draw(Canvas canvas, IViewport viewport, IStyle style, IFeature feature) { var lineString = ((LineString) feature.Geometry).Vertices; var paints = style.ToAndroid(); //using (var paint = new Paint {Color = Color.Black, StrokeWidth = 8, AntiAlias = true}) foreach (var paint in paints) { var vertices = lineString; var points = vertices.ToAndroid(); WorldToScreen(viewport, points); canvas.DrawLines(points, paint); paint.Dispose(); } }
protected override void OnDraw(Android.Graphics.Canvas canvas) { base.OnDraw(canvas); var half = canvas.Height / 2; var left = 0; var right = canvas.Width - 2; var top = 0; var bottom = canvas.Height - 1; var offsetPlier = 1; float[] points = null; switch (orientation) { case ArrowOrientation.Left: points = new float[] { right, top, left, half, left, half, right, bottom }; offsetPlier = 1; break; case ArrowOrientation.Right: points = new float[] { left, top, right, half, right, half, left, bottom }; offsetPlier = -1; break; } for (int dx = 0; dx < 5; dx++) { canvas.DrawLines(Offset(points, offsetPlier * dx, 0), arrowPaint); } }
public override void Draw(Canvas canvas) { //Console.WriteLine("EqualizerPresetGraphView - Draw - Width: {0} Height: {1}", Width, Height); float padding = 6 * Resources.DisplayMetrics.Density; float heightAvailable = Height - (padding*2); var paintRect = new Paint { AntiAlias = true, Color = Color.ParseColor("#222222") }; paintRect.SetStyle(Paint.Style.Fill); canvas.DrawRect(new Rect(0, 0, Width, Height), paintRect); if (_preset == null) return; // Draw center line var paintCenterLine = new Paint { AntiAlias = true, Color = Color.DarkGray }; paintCenterLine.SetStyle(Paint.Style.Fill); paintCenterLine.StrokeWidth = 2f; canvas.DrawLine(padding, Height / 2, Width - padding, Height / 2, paintCenterLine); // Draw 20Hz and 20kHz lines paintCenterLine.StrokeWidth = 1f; canvas.DrawLine(padding, padding, padding, Height - padding, paintCenterLine); canvas.DrawLine(Width - padding, padding, Width - padding, Height - padding, paintCenterLine); var paintText = new Paint { AntiAlias = true, Color = Color.Gray, TextSize = 14 * Resources.DisplayMetrics.Density }; float textWidth = paintText.MeasureText(_preset.Bands[_preset.Bands.Count - 1].CenterString); canvas.DrawText(_preset.Bands[0].CenterString, padding * 2, Height - (padding * 2), paintText); canvas.DrawText(_preset.Bands[_preset.Bands.Count - 1].CenterString, Width - textWidth - (padding * 2), Height - (padding * 2), paintText); if (_preset == null) return; // Draw equalizer line var points = new List<float>(); var paintEQLine = new Paint { AntiAlias = true, Color = Color.Yellow }; paintEQLine.SetStyle(Paint.Style.Stroke); paintEQLine.StrokeWidth = 2f * Resources.DisplayMetrics.Density; float x = padding; for (int a = 0; a < _preset.Bands.Count; a++) { // Value range is -6 to 6. var band = _preset.Bands[a]; //float ratio = (band.Gain + 6) / (padding * 2); float ratio = (band.Gain + 6f) / 12f; float y = padding + heightAvailable - (ratio * (Height - (padding * 2))); //Console.WriteLine("EqualizerPresetGraphView - Draw - Width: {0} Height: {1} ratio: {2} x: {3} y: {4} padding: {5} heightAvailable: {6}", Width, Height, ratio, x, y, padding, heightAvailable); points.Add(x); points.Add(y); // Add the same point a second time because Android needs start/end for each segment if (a > 0 && a < _preset.Bands.Count - 1) { points.Add(x); points.Add(y); } x += (Width - (padding * 2)) / (_preset.Bands.Count - 1); } canvas.DrawLines(points.ToArray(), paintEQLine); }