protected override void OnDraw (Android.Graphics.Canvas canvas) { TextPaint paint = Paint; paint.Color = new Color(CurrentTextColor); paint.DrawableState = GetDrawableState(); mViewWidth = MeasuredWidth; String text = (String) this.Text; mLineY = 0; mLineY += (int)TextSize; Layout layout = Layout; for (int i = 0; i < layout.LineCount; i++) { int lineStart = layout.GetLineStart(i); int lineEnd = layout.GetLineEnd(i); String line = text.Substring(lineStart, lineEnd-lineStart); float width = StaticLayout.GetDesiredWidth(text, lineStart, lineEnd, Paint); if (NeedScale(line)) { DrawScaledText(canvas, lineStart, line, width); } else { canvas.DrawText(line, 0, mLineY, paint); } mLineY += LineHeight; } }
/// <Docs>The Canvas to which the View is rendered.</Docs> /// <summary> /// Draw the specified canvas. /// </summary> /// <param name="canvas">Canvas.</param> public override void Draw(Android.Graphics.Canvas canvas) { base.Draw(canvas); var paintForAngle = new Paint { Color = (Android.Graphics.Color.White), TextSize = 37f }; paintForAngle.SetStyle(Paint.Style.Stroke); paintForAngle.SetTypeface(Typeface.CreateFromAsset(Forms.Context.Assets, "Fonts/fontawesome.ttf")); canvas.DrawText('\uf078'.ToString(), (float)(canvas.ClipBounds.CenterX() * 1.65), (float)(canvas.ClipBounds.CenterY() * 1.15), paintForAngle); #region Disposing paintForAngle.Dispose(); canvas.Dispose(); #endregion }
protected override void OnDraw(Android.Graphics.Canvas canvas) { base.OnDraw(canvas); lock (this) { Image<Bgr, byte> image = _bgrBuffers.GetBuffer(0); if (image != null && !_imageSize.IsEmpty && canvas != null) { Stopwatch w = Stopwatch.StartNew(); if ((_bmpImage != null) && (!_imageSize.Equals(_bmpImage.Size))) { _bmpImage.Dispose(); _bmpImage = null; _bmp.Dispose(); _bmp = null; } if (_bmpImage == null) { _bmp = Android.Graphics.Bitmap.CreateBitmap(_imageSize.Width, _imageSize.Height, Android.Graphics.Bitmap.Config.Rgb565); _bmpImage = new BitmapRgb565Image(_bmp); } _bmpImage.ConvertFrom(image); canvas.DrawBitmap(_bmp, 0, 0, _paint); w.Stop(); _watch.Stop(); #if DEBUG canvas.DrawText(String.Format("{0:F2} FPS; {1}x{2}; Render Time: {3} ms", 1.0 / _watch.ElapsedMilliseconds * 1000, _imageSize.Width, _imageSize.Height, w.ElapsedMilliseconds), 20, 20, _paint); #endif _watch.Reset(); _watch.Start(); } } }
protected override void OnDraw(Android.Graphics.Canvas canvas) { if (mixerValue == null) // don't do anything if we're not connected to a mixervalue return; if (bmp == null) { bmp = BitmapFactory.DecodeResource (Resources, Resource.Drawable.Fader_Knob); Bitmap scaled = Bitmap.CreateScaledBitmap (bmp, 25, 55, true); bmp.Recycle(); bmp = scaled; } int margin = 60; float radius = 4; int center = (Width / 2) + 5; int minY1 = margin - (bmp.Height / 2); int maxY1 = Height - margin - (bmp.Height / 2); rangeY = maxY1 - minY1; float factor = (float)mixerValue.GetValue() / (float)maxValue; bitmapX1 = center - bmp.Width / 2; bitmapY1 = maxY1 - (int)(factor * (float)rangeY); base.OnDraw (canvas); var paint = new Paint (); paint.Color = Color.White; paint.TextAlign = Paint.Align.Center; paint.TextSize = (float)12.0; paint.SetTypeface(Typeface.DefaultBold); if (channel_name != null) canvas.DrawText (channel_name, center - 5, 14, paint); // align with pan control int levelX1 = center - (bmp.Width / 2) - 2; int levelX2 = center + (bmp.Width / 2); paint.TextSize = (float)10.0; paint.TextAlign = Paint.Align.Right; foreach (var level in faderLevels) { float factorLevel = (float)level.Key / (float)maxValue; int levelY = maxY1 - (int)(factorLevel * (float)rangeY) + (bmp.Height / 2); canvas.DrawRect (levelX1, levelY - 1, levelX2, levelY, paint); canvas.DrawText (level.Value, levelX1 - 4, levelY + 3, paint); } paint.Color = Color.DarkGray; RectF rect = new RectF (center - 2, margin, center + 2, Height - margin); canvas.DrawRoundRect(rect, radius, radius, paint); paint.Color = Color.Black; rect = new RectF (center - 1, margin + 1, center + 1, Height - margin - 1); canvas.DrawRoundRect(rect, radius, radius, paint); bitmapX2 = bitmapX1 + bmp.Width; bitmapY2 = bitmapY1 + bmp.Height; if (isActive) { paint.Alpha = 255; } else { paint.Alpha = 180; } canvas.DrawBitmap (bmp, bitmapX1, bitmapY1, paint); //bmp.Recycle (); }
public override void Draw(Android.Graphics.Canvas canvas) { if (Control == null) return; Control.CreateGraphicBuffers(); var ctime = System.Environment.TickCount; Fleux.UIElements.Canvas.drawtime = 0; if (Control.offUpdated) { lock(Control.offBmp) { Control.Draw(new PaintEventArgs(Control.offGr, new Rectangle(0,0, Control.offBmp.Width, Control.offBmp.Height))); updcnt++; } } Control.offUpdated = false; lock(Control.offBmp) { if (Fleux.Core.FleuxApplication.HorizontalMirror) { canvas.Save(); canvas.Scale (-1, 1); canvas.Translate (-(float)Control.drect.Width(), 0); }else if (Fleux.Core.FleuxApplication.VerticalMirror) { canvas.Save(); canvas.Scale (1, -1); canvas.Translate (0, -(float)Control.drect.Height()); } Control.offGr.Flush(); canvas.DrawBitmap(Control.offBmp.ABitmap, Control.srect, Control.drect, paint); updcntflush++; } if (PerfData) { ctime = System.Environment.TickCount - ctime; { totime += ctime; } var cavg = totime / (updcnt+1); var cpaint = new Android.Graphics.Paint(); cpaint.Color = new Android.Graphics.Color(0xA0, 0xFF, 0xFF, 0xFF); cpaint.SetStyle(Android.Graphics.Paint.Style.Fill); canvas.DrawRect(0,0, 250, 20, cpaint); canvas.DrawText(""+updcnt+":"+updcntflush+":"+updcntinval+" ctime: "+ctime+"cavg:"+cavg+" canv: "+Fleux.UIElements.Canvas.drawtime, 0,20, spaint); cpaint.Dispose(); if (updcnt > 100) { totime = 0; updcnt = 0; } } }
public override void Draw(Android.Graphics.Canvas canvas) { canvas.DrawCircle (mainCenter, mainCenter + 2, radius + radiusBorder, shadowPaint); canvas.DrawCircle (mainCenter, mainCenter, radius + radiusBorder, darkerBackPaint); canvas.DrawCircle (mainCenter, mainCenter, radius, backPaint); canvas.DrawBitmap (icon, mainCenter - icon.Width / 2, mainCenter - icon.Height / 2, imgPaint); if (Count != 0) { int bubbleCenter = center - removeRadius - bubbleOffset; greenPaint.Alpha = redPaint.Alpha = currentBubbleTransparency; removePaint.Alpha = 255 - currentBubbleTransparency; canvas.DrawCircle (bubbleCenter, bubbleCenter, removeRadius, removePaint); canvas.DrawCircle (bubbleCenter, bubbleCenter, innerRadius, Count < 0 ? redPaint : greenPaint); var c = Math.Abs (Count).ToString (); var textBounds = new Rect (); removePaint.GetTextBounds (c, 0, c.Length, textBounds); canvas.DrawText (c, bubbleCenter, bubbleCenter + textBounds.Height () / 2, removePaint); } DrawingCacheEnabled = true; }
public override void Draw(Android.Graphics.Canvas canvas) { if (Control == null) return; Control.CreateGraphicBuffers(); if (origMatrix == null) { origMatrix = new Android.Graphics.Matrix(); origMatrix.Set (canvas.Matrix); } if (hMatrix == null) { hMatrix = new Android.Graphics.Matrix(); hMatrix.Set(origMatrix); hMatrix.PostTranslate(-Control.offBmp.Width, 0); hMatrix.PostScale(-1, 1); } if (vMatrix == null) { vMatrix = new Android.Graphics.Matrix(); vMatrix.Set(origMatrix); vMatrix.PostTranslate(0, -Control.offBmp.Height); vMatrix.PostScale(1, -1); } var ctime = System.Environment.TickCount; var realupdate = false; Fleux.UIElements.Canvas.drawtime = 0; /**/ if (Control.offNeedExtraDraw && Control.offUpdated) lock(Control.offBmp){ Control.offNeedExtraDraw = false; Control.offUpdated = false; Control.offBmpDraw = true; Control.Draw(new PaintEventArgs(Control.offGr, new Rectangle(0,0, Control.offBmp.Width, Control.offBmp.Height))); Control.offBmpDraw = false; updcnt++; realupdate = true; } //*/ lock(Control.offBmp) { if (Fleux.Core.FleuxApplication.HorizontalMirror) { canvas.Matrix = hMatrix; }else if (Fleux.Core.FleuxApplication.VerticalMirror) { canvas.Matrix = vMatrix; }else canvas.Matrix = origMatrix; // Thats for FastGraphics.cs Control.offGr.Flush(); canvas.DrawBitmap(Control.offBmp.ABitmap, 0,0, paint); Control.offUpdated = false; updcntflush++; } if (PerfData) { ctime = System.Environment.TickCount - ctime; //if (realupdate) { totime += ctime; } var cavg = totime / (updcnt+1); var cpaint = new Android.Graphics.Paint(); cpaint.Color = new Android.Graphics.Color(0xA0, 0xFF, 0xFF, 0xFF); cpaint.SetStyle(Android.Graphics.Paint.Style.Fill); canvas.DrawRect(0,0, 250, 20, cpaint); canvas.DrawText(""+updcnt+":"+updcntflush+":"+updcntinval+" ctime: "+ctime+"cavg:"+cavg+" canv: "+Fleux.UIElements.Canvas.drawtime, 0,20, spaint); cpaint.Dispose(); if (updcnt > 100) { totime = 0; updcnt = 0; } } }
protected override void OnDraw(Android.Graphics.Canvas canvas) { base.OnDraw(canvas); // Fill the background canvas.DrawPaint(mBackgroundPaint); // Test Text canvas.Save(); var textWidth = mTextPaint.MeasureText("Hello"); Rect textBounds = new Rect(); mTextPaint.GetTextBounds("Hello", 0, 1, textBounds); canvas.DrawText("Hello", canvas.Width/2-textWidth/2, canvas.Height/2 - textBounds.Height()/2, mTextPaint); textWidth = mTextPaint.MeasureText("World"); textBounds = new Rect(); mTextPaint.GetTextBounds("World", 0, 1, textBounds); mTextPaint.Color = Color.Green; canvas.DrawText("World", (canvas.Width/2-textWidth/2) +100, (canvas.Height/2 - textBounds.Height()/2) + 100, mTextPaint); canvas.Restore(); foreach (Box box in mBoxes) { float left = Math.Min(box.Origin.X, box.Current.X); float right = Math.Max(box.Origin.X, box.Current.X); float top = Math.Min(box.Origin.Y, box.Current.Y); float bottom = Math.Max(box.Origin.Y, box.Current.Y); canvas.Save(); canvas.Rotate(box.Rotation, (box.Origin.X + box.Current.X)/2, (box.Origin.Y + box.Current.Y)/2 ); canvas.DrawRect(left, top, right, bottom, mBoxPaint); canvas.Restore(); } }