Location in Mono for Android: Listing 2

The CompassView class.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Android.Graphics;
namespace Compass
    public class CompassView : View
        public CompassView(Context context)
            : base(context)
        public CompassView(Context context, IAttributeSet attrs) :
            base(context, attrs)

        public CompassView(Context context, IAttributeSet attrs, int defStyle) :
            base(context, attrs, defStyle)

        private void Initialize()
        private float direction = 0;
        private Android.Graphics.Paint paint = new Paint(PaintFlags.AntiAlias);
        private bool firstDraw;

        private void init(){

            paint.StrokeWidth = 3;
            paint.Color = Color.White;
            paint.TextSize = 30;
            firstDraw = true;

        protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            SetMeasuredDimension(MeasureSpec.GetSize(widthMeasureSpec), MeasureSpec.GetSize(heightMeasureSpec));
        protected override void OnDraw(Canvas canvas) {

            int cxCompass = MeasuredWidth/2;
            int cyCompass = MeasuredHeight/2;
            float radiusCompass;

            if(cxCompass > cyCompass){
             radiusCompass = (float) (cyCompass * 0.9);
             radiusCompass = (float) (cxCompass * 0.9);
            canvas.DrawCircle(cxCompass, cyCompass, radiusCompass, paint);
            canvas.DrawRect(0, 0, MeasuredWidth, MeasuredHeight, paint);

             canvas.DrawLine(cxCompass, cyCompass,
               (float)(cxCompass + radiusCompass * Math.Sin((double)(-direction) * 3.14/180)),
               (float)(cyCompass - radiusCompass * Math.Cos((double)(-direction) * 3.14/180)),
             canvas.DrawText(direction.ToString(), cxCompass, cyCompass, paint);
        public void updateDirection(float dir)
            firstDraw = false;
            direction = dir;


About the Author

Wallace (Wally) B. McClure has authored books on iPhone programming with Mono/Monotouch, Android programming with Mono for Android, application architecture, ADO.NET, SQL Server and AJAX. He's a Microsoft MVP, an ASPInsider and a partner at Scalable Development Inc. He maintains a blog, and can be followed on Twitter.

comments powered by Disqus


  • 'Dev Home' Update Leads Developer Goodies in AI-Powered Windows 11 Update

    Along with today's new AI-powered Windows 11 update come new goodies for developers, including a new edition of Dev Home, a preview offering described as a "control center" providing coding-focused features and functionality.

  • Community Dev Gives VS Code Python Some YAPF

    The latest update to Python in Visual Studio Code includes a new extension for Python formatting that was contributed by a member of the open source community.

  • Devs Demand Visual Studio 2022 Ditch Old .NET Framework Dependencies

    Developers commenting on a Microsoft post about performance improvements in the upcoming .NET 8 demanded the company end Visual Studio 2022's dependency on the old .NET Framework.

  • Microsoft Remakes Azure Quantum Dev Kit with Rust, 'and It Runs in the Browser!'

    "The' tl;dr' is that we rewrote it (mostly) in Rust which compiles to WebAssembly for VS Code or the web, and to native binaries for Python."

Subscribe on YouTube