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


  • Vendors Update Controls for .NET Core 3.1, Blazor

    This week saw two third-party vendors of dev tools -- UX and UI toolkits and controls -- release new offerings that include support for two of Microsoft's main open source frameworks, the cross-platform .NET Core 3.1 and Blazor, which allows for creating browser-based web applications with C# instead of JavaScript.

  • C++ Is Focus of New Visual Studio 2019 v16.7 Preview 2

    C++ development is a focus point of the new Visual Studio 2019 v16.7 Preview 2, featuring a slew of tweaks and improvements touching upon remote SSH connections, IntelliSense support and more.

  • Clustering Non-Numeric Data Using C#

    Clustering non-numeric -- or categorial -- data is surprisingly difficult, but it's explained here by resident data scientist Dr. James McCaffrey of Microsoft Research, who provides all the code you need for a complete system using an algorithm based on a metric called category utility (CU), a measure how much information you gain by clustering.

  • So What's Up with Microsoft's (and Everyone Else's) Love of Rust?

    Microsoft already stewards several popular programming languages -- C#, TypeScript, F# -- so what's up with its love of Rust, along with the rest of the world?

  • C# Steps Up Programming Language Popularity Ladder

    Microsoft's C# programming language climbed a year-over-year notch on the TIOBE Index, which measures popularity among developers.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events