Tag Archives: Microsoft

Let’s draw basic 2D Shapes with SkiaSharp…

So on my last post I shared a recap of my tech talk on SkiaSharp with Xamarin.Forms, check it out if you missed it: So I gave a Tech Talk on SkiaSharp with Xamarin.Forms…

There I talked about some of the most important parts of the whole 1 hour plus presentation-hands-on-labs session, in which I didn’t share all the details of the whole session. I did a pretty comprehensive demo session there, specially about the 2D drawing basics of SkiaSharp, which I didn’t highlight in that post.

Basic 2D Shapes with SkiaSharp…

So today I thought of sharing the demos I did there, about basic 2D shapes drawing with SkiaSharp more extensively… 🙂 Since there seem to be a lack of tutorials explaining this topic of, “draw basic Shapes with SkiaSharp”, which I think should be more important for beginners!

So buckle up fellas, let’s see how we could draw some of the most commonly used 2D shapes with SkiaSharp with ease… 😉

There’s many out of the box support for drawing basic 2D Shapes from SkiaSharp, such as DrawCircle(), DrawRectangle(), DrawLine(), DrawOval() and so on many more.  You could stright away use those methods or you could even go around it and use Paths and Lines drawing methods of SkiaSharp in order to draw them, which is completely up to you.

But SkiaSharp doesn’t have methods for drawing for every single kind of Geometrical shape there is out there. So if you want to draw some kind of complex shape, then you could basically use a combination of Paths and Lines drawing methods in SkiaSharp, which has many kinds of methods you could come up with. 😉 that’s the beauty of SkiaSharp! Anyways the choice of drawing methods are totally up to you!

Now if you want to get ahead of yourself, you may grab the live hands on demo code I did at the presentation which includes all of the below code, right from my github repo: https://github.com/UdaraAlwis/XFSkiaSharpDemo

Just on a note, here I will not be discussing basics of SkiaSharp or the setting up of SkiaSharp library or the Canvas properties and behaviours, I’ll directly get into the programming of the shapes drawing, but if you want to get a head start, head off to Xamarin SkiaSharp Documentation or my previous post, So I gave a Tech Talk on SkiaSharp with Xamarin.Forms…

1. Simple Stroke Line…

private void SkCanvasView_OnPaintSurface
		(object sender, SKPaintSurfaceEventArgs e)
{
	...
	
	// Drawing Stroke
	using (SKPaint skPaint = new SKPaint())
	{
		skPaint.Style = SKPaintStyle.Stroke;
		skPaint.IsAntialias = true;
		skPaint.Color = SKColors.Red;
		skPaint.StrokeWidth = 10;
		skPaint.StrokeCap = SKStrokeCap.Round;

		skCanvas.DrawLine(-50, -50, 50, 50, skPaint);
	}
}

 

We use the DrawLine() and pass in the Line’s starting point’s XY position and and ending point’s XY position, while passing in the paint configuration, SKPaint as we wish.

 

Since SkiaSharp support pure Xamarin.Forms you can straight away run all your native projects without any hassle of handling native code.

2. Drawing a Circle (Filled)

// Drawing a Circle
using (SKPaint skPaint = new SKPaint())
{
	skPaint.Style = SKPaintStyle.Fill;
	skPaint.IsAntialias = true;
	skPaint.Color = SKColors.Blue;
	skPaint.StrokeWidth = 10;

	skCanvas.DrawCircle(0, 0, 70, skPaint);
}

 

We shall be using the DrawCircle() whilst passing in the Circle’s center XY position and desired radius for it. To define whether its a Filled or Non-Filled circle we’ll be using Style property in our SKPaint configuration.

 

Next let’s draw a Circle with just the stroke (with filling the inner of the circle).

3. Drawing a Circle (Un-filled)

We do this by setting the Style property to Stroke! and everything else is the same 🙂

// Drawing a Circle Stroke
using (SKPaint skPaint = new SKPaint())
{
	skPaint.Style = SKPaintStyle.Stroke;
	skPaint.IsAntialias = true;
	skPaint.Color = SKColors.Red;
	skPaint.StrokeWidth = 10;

	skCanvas.DrawCircle(0, 0, 70, skPaint);
}

 

 

Look how simple eh 😉

4. A Square Rectangle!

How about a standard Rectangle? We shall use the SKRect object to configure our Rectangle as we wish and draw it up!

// Draw Rectangle
SKPaint skPaint = new SKPaint()
{
	Style = SKPaintStyle.Stroke,
	Color = SKColors.DeepPink,
	StrokeWidth = 10,
	IsAntialias = true,
};

SKRect skRectangle = new SKRect();
skRectangle.Size = new SKSize(100, 100);
skRectangle.Location = new SKPoint(-100f / 2, -100f / 2);

skCanvas.DrawRect(skRectangle, skPaint);

 

See it in action? 😉

 

The square root of 69 is 8 something, right? – Drake 😉 lol

5. Let’s draw an Ellipse…

There’s many ways to draw an Eclipse, but most common way is to use DrawOval(), as well as other kinds of complex drawings.

// Draw Ellipse
SKPaint skPaint = new SKPaint()
{
	Style = SKPaintStyle.Stroke,
	Color = SKColors.OrangeRed,
	StrokeWidth = 10,
	IsAntialias = true,
};

SKRect skRectangle = new SKRect();
skRectangle.Size = new SKSize(150, 100);
skRectangle.Location = new SKPoint(-100f / 2, -100f / 2);

skCanvas.DrawOval(skRectangle, skPaint);

 

 

So here we’re configuring a Rectangle with SKRect, which an Ellipse could be mathematically consist of.

6. How about an Arc shape?

Well it’s basically the same concept as of an Ellipse, but since we need an “Arc”, we’re going to use some basic mathematical angles to configure the starting angle, startAngle and sweep angle, sweepAngle of the Arc we’re going to draw with a Path object.

// Draw Arc
SKPaint skPaint = new SKPaint()
{
	Style = SKPaintStyle.Stroke,
	Color = SKColors.BlueViolet,
	StrokeWidth = 10,
	IsAntialias = true,
};

SKRect skRectangle = new SKRect();
skRectangle.Size = new SKSize(150, 150);
skRectangle.Location = new SKPoint(-150f / 2, -150f / 2);

float startAngle = -90;
float sweepAngle = 230; // (75 / 100) * 360

SKPath skPath = new SKPath();
skPath.AddArc(skRectangle, startAngle, sweepAngle);

skCanvas.DrawPath(skPath, skPaint);

 

So there we’re configuring our Path object to start off from -90 degrees and ends up at 230 degrees from the start point, drawing the Arc shape. Notice the comment I’ve added there, showcasing how you could also calculate the Arc’s drawing angle as a percentage value. 😀

 

Pretty cool eh! 😉

7. Did we forget Text?

Did you know you could even draw text on a SkiaSharp canvas right away by using DrawText() method.

// Drawing Text
using (SKPaint skPaint = new SKPaint())
{
	skPaint.Style = SKPaintStyle.Fill;
	skPaint.IsAntialias = true;
	skPaint.Color = SKColors.DarkSlateBlue;
	skPaint.TextAlign = SKTextAlign.Center;
	skPaint.TextSize = 20;

	skCanvas.DrawText("Hello World!", 0, 0, skPaint);
}

 

SkPaint object holds several properties for drawing Text on the canvas, such as TextAlright, TextSize and many more you could play around with..

 

Hello World, indeed! 😉

8. Let’ draw a simple Triangle?

Well SkiaSharp doesn’t have a out of the box method call for drawing a Triangle, this is where simple Drawing path and points comes into play.

So basically what we do is, we’ll draw three lines that’s interconnects at the ending points, using DrawPoints() method and pass in the list of Points that’ll draw the Lines…

// Draw Rectangle
SKPaint skPaint = new SKPaint()
{
	Style = SKPaintStyle.Stroke,
	Color = SKColors.DeepSkyBlue,
	StrokeWidth = 10,
	IsAntialias = true,
	StrokeCap = SKStrokeCap.Round
};

SKPoint[] skPointsList = new SKPoint[]
{
	// Path 1
	new SKPoint(+50,0),
	new SKPoint(0,-70),

	// path 2
	new SKPoint(0,-70),
	new SKPoint(-50,0),

	// path 3
	new SKPoint(-50,0),
	new SKPoint(+50,0),
};

skCanvas.DrawPoints(SKPointMode.Lines, skPointsList, skPaint);

 

See it first may be?

 

So now if you think about it, you could actually draw any kind of a Shape with interconnecting Points and Paths using the above method. 😀

9. Draw any Shape?

It’s true earlier step, in Triangle drawing I said you could use the DrawPoints() and a bunch of Points to draw any kind of shape in SkiaSharp. This is actually a painful, but there’s actually a better way… 😉 yaay!

So basically if you needed to draw any kind of shape, all you need is a Path and a bunch of Points that interconnects. A much easier way to do this is by using a SKPath configuration object, using this you could pass define the Starting Point of the drawing path, move around the drawing path with interconnecting Points by using MoveTo() and LineTo() calls. For this you use the mighty DrawPath() method, which you could use to draw anything on the canvas. 😀

// Draw any kind of Shape
SKPaint strokePaint = new SKPaint
{
	Style = SKPaintStyle.Stroke,
	Color = SKColors.Black,
	StrokeWidth = 10,
	IsAntialias = true,
};

// Create the path
SKPath path = new SKPath();

// Define the drawing path points
path.MoveTo(+50, 0); // start point
path.LineTo(+50, -50); // first move to this point
path.LineTo(-30, -80); // move to this point
path.LineTo(-70, 0); // then move to this point
path.LineTo(-10, +90); // then move to this point
path.LineTo(+50, 0); // end point

path.Close(); // make sure path is closed
// draw the path with paint object
skCanvas.DrawPath(path, strokePaint);

 

There you go…

 

So with the use of SKPath, you could draw any kind of 2D shape as you wish… 😀

10. Final shape?

Oh sorry! there ain’t none! 😛 just put up a 10th point for the fun of it! 😉

Well you could grab all of the above code up in my Github repo: https://github.com/UdaraAlwis/XFSkiaSharpDemo That right there is actually the live hands on demo code I did at my original presentation…

So now get out of here and start drawing 2D with SkiaSharp! 😀

or may be check out my talk on SkiaSharp…

Shape the love fellas! 😀

-Udara Alwis.

Advertisements

So I gave a Tech Talk on SkiaSharp with Xamarin.Forms…

A little back story…

Few months back our company was asked to do a graphics application, so we decided to take a look into graphics rendering libraries available for Xamarin.Forms, given the limited time, we thought of going for SkiaSharp over other alternatives, which we had very little knowledge of how to work with.

But to our surprise we managed to build an incredible app with beautiful interactive graphics and animations completely using SkiaSharp with Xamarin.Forms. So I thought of sharing my experience with the fellow dev community. 😀

Opportunity…

So few weeks back (18th June, 2017), I had the opportunity to give a tech talk-hands on demos, at Singapore Mobile .Net Developers  meetup, under the topic “2D Graphics Rendering in Xamarin.Forms with SkiaSharp”!

udara alwis presentation skiasharp xamarin microsoft

So I’m about to share some of the stuff I presented at this meetup, although I will not be diving into every single detail I talked about there, only be focusing on the key points (mostly on the hands on demo bits). If you’re interested in learning SkiaSharp for Xamarin.Forms, go ahead to the the incredible documentation provided by Xamarin: https://developer.xamarin.com/skiasharp/

Here’s the short recap of the presentation I did over there! 😉

2D Graphics Rendering in Xamarin.Forms with SkiaSharp!

So let’s get started off with the Slideshow Presentation…

And you may grab the live hands on demo code I did at the presentation from my github repo: https://github.com/UdaraAlwis/XFSkiaSharpDemo

Now let’s recap…

Behold the incredible 2D Rendering Engine for Xamarin and Xamarin.Forms, SkiaSharp!

An open source project originally developed by Google(Thank you <3), from C++ language, by the name Skia. It is used across a huge variety of Google’s products, including web graphics rendering and so on. This is a Immediate mode 2D vector graphics rendering system, this framework allows you to do 2D graphics, handling and manipulating image resources and text and a lot of cool stuff. 😀

So SkiaSharp is the C# and DotNet wrapper of Skia framework allowing us to use it right on top of Xamarin, a mono based open source project, where you could add your own contribution to it via: github.com/mono/SkiaSharp!

SkiaSharp for Xamarin.Forms comes with the SKCanvasView that inherits from Xamarin.Forms.View which allows you to use it as just another View in your PCL code, and you don’t have to handle any native implementation, everything is accomplished right in your PCL code. 😉

SkiaSharp basics Demo..

For setting up SkiaSharp, open your nuget manager and install “SkiaSharp.Views.Forms” across your Xamarin.Forms solution, including PCL and platform specific projects.

Add the SKCanvasView to your page as you wish.

<ContentPage
    x:Class="XFSkiaSharpDemo.MainPage"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:forms="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"
    xmlns:local="clr-namespace:XFSkiaSharpDemo">

    <forms:SKCanvasView x:Name="SkCanvasView" PaintSurface="SkCanvasView_OnPaintSurface" />

</ContentPage>

 

Notice the PaintSurface event, the most important execution point you need to handle in order to render your graphics on the SKCanvas. Every time you need to do any kind of a drawing or rendering of 2D graphics on your Canvas, you need to do it in this event, this method is first invoked when the Page appears on the screen, and then if the orientation changes or you could even manually invoke it by calling InvalidateSurface() of your SkCanvasView.

Let’s do that…

public partial class
	MainPage : ContentPage
{
	...

	private void SkCanvasView_OnPaintSurface
		(object sender, SKPaintSurfaceEventArgs e)
	{
		// Init skcanvas
		SKImageInfo skImageInfo = e.Info;
		SKSurface skSurface = e.Surface;
		SKCanvas skCanvas = skSurface.Canvas;

		// clear the canvas surface
		skCanvas.Clear(SKColors.SkyBlue);

		// retrieve the canvas info
		var skCanvasWidth = skImageInfo.Width;
		var skCanvasheight = skImageInfo.Height;
	}
}

 

This event provides you with all the required properties and values to execute your 2D rendering, such as the SKCanvas instance, which is the actual canvas you’re going to do the 2D drawing on, SKImageInfo instance which provides you with details such as actual Width and Height by pixels and so on.

The Clear() method call, clears up the canvas surface and prepare it for rendering new content, by passing it a SKColor object, you can paint it with that color.

2D Graphics with SkiaSharp..

The SKCanvasView is actually a placeholder for the SKCanvas which you can access in the PainSurface() event.

There’s many ways to draw or render stuff on our Canvas, but SkiaSharp also provides us predefined methods that allows us to draw simple types of shapes such as Circles, Lines and Texts, etc.

So usually when you are to do some complex drawings you would be using a combination of all those drawing methods at a given rendering cycle.

Transform Operations…

SkiaSharp allows you to do all kinds of Translations, Scaling, Rotating and even Skewing on the Canvas.

Usually on the Canvas, the X,Y coordinate system starts from the top left most corner and Y axis increments vertically and X axis increments horizontally.

So lets see how we could manipulate this in our favor and do some basic Translation and Scaling on the Canvas.

private void SkCanvasView_OnPaintSurface
	(object sender, SKPaintSurfaceEventArgs e)
{
	...
	
	// move canvas's X,Y to center of screen
	skCanvas.Translate((float)skCanvasWidth / 2,
				(float)skCanvasheight / 2);

	// set the pixel scale of the canvas
	skCanvas.Scale(skCanvasWidth / 200f);
}

 

There we are Translating the Canvas’s X,Y coordinate system to be started off of the center of the screen, and then Scaling the Canvas to the ratio of 200 pixels according to the actual canvas Width.

SKPaint object..

SKPaint object is one of the most important element in SkiaSharp, it holds the configuration for any given type of 2D rendering, so you’ll be storing your drawing configuration in that object, such as Color, Style, Stroke Width/Height, Anti Alias and so on.

SKPaint skPaint = new SKPaint()
{
	Style = SKPaintStyle.Fill,
	IsAntialias = true,
	Color = SKColors.Blue,
};

 

There’s how you instantiate a SKPaint object which you’ll using to render your 2D graphics, it’s got all kinds of drawing properties and configurations you can play around with. 🙂

Draw a simple Circle (Filled and Non-Filled)

Let’s get our hands dirty with some actual 2D drawing eh! 😉

// Drawing a Circle
using (SKPaint skPaint = new SKPaint())
{
	skPaint.Style = SKPaintStyle.Fill;
	skPaint.IsAntialias = true;
	skPaint.Color = SKColors.Blue;
	skPaint.StrokeWidth = 10;

	skCanvas.DrawCircle(0, 0, 50, skPaint);
}

...

// Drawing a Circle Stroke
using (SKPaint skPaint = new SKPaint())
{
	skPaint.Style = SKPaintStyle.Stroke;
	skPaint.IsAntialias = true;
	skPaint.Color = SKColors.Red;
	skPaint.StrokeWidth = 10;

	skCanvas.DrawCircle(0, 0, 70, skPaint);
}	

 

We shall be using the DrawCircle() whilst passing in the Circle’s center XY position and desired radius for it. To define whether its a Filled or Non-Filled circle we’ll be using Style property in our SKPaint configuration.

 

Look how simple and beautiful eh 😉

Since SkiaSharp support pure Xamarin.Forms you can straight away run all your native projects without any hassle of handling native code.

To learn more about drawing on the Canvas you can check out the official Documentation: https://developer.xamarin.com/guides/cross-platform/drawing/

Handling User Interactions…

When it comes to most Xamarin.Forms components, they do not have touch handlers, however the SKCanvasView comes default with a Touch event handler, Touch and a boolean property to enable or disable Touch Events, EnableTouchEvents.

You can straightaway use that even and property to handle touch events on the SKCanvas.

<forms:SKCanvasView x:Name="SkCanvasView" 
		EnableTouchEvents="True" 
		Touch="SkCanvasView_Touch"
		PaintSurface="SkCanvasView_OnPaintSurface" />

 

You can subscribe to it and look for the type of touch event and handle it.

private void SkCanvasView_Touch(
object sender, SKTouchEventArgs e)
{
	if (e.ActionType == 
		SkiaSharp.Views.Forms.SKTouchAction.Pressed)
	{
		_lastTouchPoint = e.Location;
		e.Handled = true;
	}

	_lastTouchPoint = e.Location;

	// update the Canvas as you wish
	SkCanvasView.InvalidateSurface();
}

 

As you can see it gives you the Touch point location. You can get a hold of the event and the touch point and you want to do some drawing on the SKCanvasView, then you could call the InvalidateSurface().

private SKPoint _lastTouchPoint = new SKPoint();
private void SkCanvasView_OnPaintSurface
(object sender, SKPaintSurfaceEventArgs e)
{
	...
	
	using (SKPaint paintTouchPoint = new SKPaint())
	{
		paintTouchPoint.Style = SKPaintStyle.Fill;
		paintTouchPoint.Color = SKColors.Red;
		skCanvas.DrawCircle(
			_lastTouchPoint.X,
			_lastTouchPoint.Y,
			50, paintTouchPoint); // 45
	}
}

 

Here it is in action… pretty simple eh! 😉

  

But this touch handler is very primitive, as in if you want to handle multiple concurrent touch points, or special gesture touches, pan, or zoom and so on, then you need to implement a more advanced low level touch handler, something described as here:

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/effects/touch-tracking/

That way you could simply attach the above TouchEffect just as a normal effect and see the complex touch events in action.

<Grid>
	<skia:SKCanvasView x:Name="SkCanvasView"
		PaintSurface="SkCanvasView_OnPaintSurface" />
		
	<Grid.Effects>
		<tt:TouchEffect Capture="True"
			TouchAction="OnTouchEffectAction" />
	</Grid.Effects>
</Grid>

 

There you go! 😀

Bitmap Image Handling….

Images are pretty crucial when it comes to  2D Graphics, it gives more of added advantage over your design idea.

As of Xamarin.Forms, the conventional the conventional way of loading an image is, either as an Embedded Resource or Platform Specific Resource.

So in SkiaSharp for Xamarin.Forms, provides you SKBitmap or SKImage for handling your image resources. You have few options to load an image, from a data stream, file path and so on.

The most common way in the sense of Xamarin.Forms architecture, you have the option of loading your Images directly from PCL as Embedded Resources, and then convert it to a SKBitmap or SKImage.

string resourceID = "XFSkiaSharpDemo.Resources.xamarinmonkey.png";
Assembly assembly = GetType().GetTypeInfo().Assembly;

SKBitmap skBitmap;

using (Stream stream 
		= assembly.GetManifestResourceStream(resourceID))
using (SKManagedStream skStream
		= new SKManagedStream(stream))
{
	skBitmap = SKBitmap.Decode(skStream);
}

skCanvas.DrawBitmap(skBitmap, 
	SKRect.Create(-50, -50, 100, 100), null);

 

There you have it, we are using the DrawBitmap() method for drawing the image on canvas.

 

But if you have a Xamarin.Forms ImageSource at hand and you need to use in SKCanvas, then you have convert it a Stream object and convert it to SKBitmap, which you could use to manipulate or draw using SkiaSharp on the Canvas. 😉

Image Filters..

Thanks to SkiaSharp you don’t have to manually implement image filters at all, since it packs a pretty cool set of Image Filters out of the box. 😀

Here’s a small sample of a blur image filter implementation…

// built-it blur image Filter
var filter = SKImageFilter.CreateBlur(5, 5);
var skPaint = new SKPaint();
skPaint.ImageFilter = filter;

skCanvas.DrawBitmap(skBitmap, 
	SKRect.Create(-50, -50, 100, 100), null);

 

SKImageFilters is the class that provides the built in filters. 🙂 You attach that object to a SKPaint configuration and draw the Bitmap with it!

 

Keep in mind, there’s a lot more default Image Filters you could play around with! 😉

*drum beat*! 😀

Rendering Animations…

Although Xamarin.Forms packs some pretty decent set of Animations out of the box, we don’t much control over the animation for customization.

But using something like a 2D Rendering Engine, we could create whatever the animation or customization as we wish. SkiaSharp of course is a great option, but that being said, there’s no direct Animation handling available. Because it’s simply a 2D vector rendering engine.

So this means if you want to render some continuous animation with SkiaSharp, you need to handle every single frame of it manually from your code.

So by actual implementation there’s few ways to do this, but the actual underlying idea is to repeatedly render a given set of values on the Canvas, preferably triggered by a continuous timer of sorts.

Stopwatch stopwatch = new Stopwatch();
bool pageIsActive;
float t;
const double cycleTime = 1000; // in milliseconds

private void InitAnimation()
{
	pageIsActive = true;
	stopwatch.Start();

	Device.StartTimer(TimeSpan.FromMilliseconds(33), () =>
	{
		// calculate t for current 
		// tick with regards to cycletime
		t = (float)(stopwatch.Elapsed.TotalMilliseconds
					% cycleTime / cycleTime);
		// invoke redraw on canvas
		SkCanvasView.InvalidateSurface();

		if (!pageIsActive)
		{
			stopwatch.Stop();
		}
		return pageIsActive;
	});
}

 

The above shows you you could create a simple continuous pulse generator relative to milliseconds and execute a continuous animation. In simple terms the Timer is running each 33 milliseconds, calculates a value (t) based on the total elapsed milliseconds on the stopwatch, relative to the cycle time (controls the speed of animation) and repeats. Then calls the SKCanvas redraw. Make sure to call this method on PageAppearing() to start the timer and set the pageIsActive = false on PageDisappearing() to the timer stops.

private void SkCanvasView_OnPaintSurface
	(object sender, SKPaintSurfaceEventArgs e)
{
	... 
	
	// calculate circle radius for this cycle
	float radius = 70 * t;

	// Drawing a Circle Stroke
	using (SKPaint skPaint = new SKPaint())
	{
		skPaint.Style = SKPaintStyle.Stroke;
		skPaint.IsAntialias = true;
		skPaint.Color = SKColors.Red;
		skPaint.StrokeWidth = 10;

		skCanvas.DrawCircle(0, 0, radius, skPaint);
	}
}

 

There as you can see we are drawing the Circle at the given rendering cycle with relative to the generate “t” value at the Timer. So the Circle’s radius will keep on varying from 0 – 70, thus creating the animation effect.

 

Now keep in mind there’s nothing to worry about the rendering performance, since SkaiSharp is a rendering engine. 🙂 You can configure the animation even more faster as you wish, it wouldn’t make much effect on app’s performance! 😉

More Awesome Stuff…

If you want to learn more, check out Xamarin official documentation: https://developer.xamarin.com/guides/skiasharp/

If you need to check out sample code and demos : https://developer.xamarin.com/SkiaSharpFormsDemos/

This presentation’s demo on github…

That’s right, you can get the full demo code I’ve showcased in the presentation up in my github: https://github.com/UdaraAlwis/XFSkiaSharpDemo

I haven’t shared all the demo code I’ve presented in this blog post, but you call find all of the demo code from my git repo above! 🙂

Conclusion…

Yep that’s pretty much it, just get out of here and build something awesome with SkiaSharp! 😉

Share the love! 😀

Cheers!
– Udara Alwis

So I gave a Tech Talk at Dot Net Developers Meetup, Singapore hosted by Microsoft…

Yeei! 😀 I got an awesome opportunity present a tech talk at Dot Net Developers Meetup in Singapore which was hosted by Microsoft. This happened to be my first ever Presentation on Xamarin, and yeah it was totally awesome. A great enthusiastic crowd and everything went pretty well.. 🙂

Thank you so much for the Organizers and Microsoft for this incredible opportunity, and I’m truly humbled by it.

There I spoke about Xamarin and Xamarin Forms, Xamarin UI Rendering process, Overriding this process through Custom Renderers, and important facts to keep in mind when implementing Custom Renderers in Xamarin Forms.

So I thought of putting out a small article on the Summary of this tech talk on my blog. 😀

Xamarin Forms Custom Renderers for the Rescue…

Here’s the slideshow I used during this talk…

Xamarin is…

Xamarin is truly a great platform. It let’s you create mobile applications using C# dot net having full Native Performance as well as Looks and Feels of each Native Platform.

Xamarin Forms Custom Renderers for the Rescue.004

As you can see in the diagram, thanks to Xamarin now we can maintain the same code base across all three mobile platforms, having the individual native UI implementation, which allows us to maintain up to about 70% percent shared codebase. So yeah its all Great.

Xamarin Forms is…

Xamarin Forms, in one single word, is awesome! Its more like the cross platform extension of Xamarin this is the component which brings to life of the concept, Write once, Run Everywhere, and not Suck allowing us to share the UI code layer among three platforms. So you no longer need to implement the UI separately for each platform.

Xamarin Forms Custom Renderers for the Rescue.005

Xamarin and Xamarin Forms ?

Some people are confused about these differentiation between Xamarin and Xamarin Forms, let me put it this way…

Xamarin Forms Custom Renderers for the Rescue.006

Xamarin Forms is more like the true cross platform extention of Xamarin. Where as Xamarin Forms provides us a unified UI Layer which has all the common UI controls (Layouts, Labels, TextBoxes, Buttons, etc…) of all three mobile platforms, with almost every single common property of those controls.

Still Confused ? Let me explain…

Xamarin Forms Custom Renderers for the Rescue.007

In your left hand side you can see the Native Xamarin architecture where you share the back-end code base, but you have to implement the UI separately for each platoform, allowing us to share upto 70-80% of code base.

Where as in Xamarin Forms you can share almost upto 100% of the code base across all three platforms with the Shared UI Layer.

A little Story about a fresh Xamarin Forms developer…

There’s this developer who started developing an application with Xamarin forms, where he’s given all the UI sketches and so on.

Xamarin Forms Custom Renderers for the Rescue.008

So he start off with default nice and simple controls in Xamarin Forms and manages to implement the basic UI design of the app. Then he slowly gets into complex UI designs implementations…

So he starts going through all the available properties in these Xamarin Forms Controls, and begins to wonder where are all the properties that he needs to be using in order to customize the app accordingly to the complex design.

So he looks up and down, here and there, wondering where did all the properties go?

Oh boy, he’s in trouble, isn’t he… He realise Xamarin Forms UI controls has limited set of properties for customization, and its very hard to do complex customization in these controls.

Any Solutions ?

Any solutions ? Well he could always go back to native development, but its late for it now, and it’ll put him through a lot of trouble for sure, having to implement in three platforms.

Now that’s where Xamarin Forms Custom Renderers comes in for the rescue, let me explain.

Xamarin Forms Custom Renderers for the Rescue.010

Xamarin Forms UI Rendering process…

Each and every UI Control in Xamarin Forms has it’s own Native Renderer which renders and maps its Properties and Behaviours to the Native Control level.

So yeah behold the Magic of Xamarin Forms, this happens accordingly to the Native Platforms. This is why we get the Native look and feel and performance with Xamarin Forms.

Xamarin Forms Custom Renderers for the Rescue.011

Take a look at the Diagram here it shows how the default texbox UI Control of Xamarin Forms, which is called “Entry” control gets rendered down to the Native level through the Renderers. Now focus down through the iOS rendering, where the Entry control gets rendered down to the native UITextField control. And on Android and Windows Phone, EditText and UserControl respectively.

Overriding this Rendering Process ?

Xamarin has allowed us to access this Rendering process, which in return allows us to Override this default process and use it for our own requirements.

Xamarin Forms Custom Renderers for the Rescue.012

So by accessing this process we can customize all kinds of properties and behaviours of the Xamarin Forms controls, in each platform according to our needs.

Xamarin Forms Custom Renderers…

So in order to access this rendering process we need to create Custom Renderers of our own by sub classing the base Renderers Xamarin provides. Thereby it allows us to access and modify the native level properties and behaviours of the Xamarin Forms Controls.

Xamarin Forms Custom Renderers for the Rescue.013

Take a look at the Diagram above, that’s how Custom Renderers gets involved in the Rendering process, where as the Xamarin Forms Entry control goes through the Custom Renderer and down to the base renderer, where we control and modify its properties and behaviours in our Custom Renderer as we need.

How to create Xamarin Forms Custom Renderers ?

Just 3 simple steps…

  1. First you create a Custom Control by subclassing the default Xamarin Forms Control that you need to create a Custom Renderer for.
  2. Second you consume that subclassed Custom Control in your Xamarin Forms application.
  3. Thirdly and finally, you implement the Custom Renderer in the Native levels project.

Yeah how hard could it be, just three simple steps! 😉

Here’s a Simple Custom Renderer Demo on the house…

Check out the live demo Custom Renderer I implemented during this presentation on my Github from below, https://github.com/UdaraAlwis/XFCircleCornersButtonControlDemo

Important facts to consider WHEN implementing Custom Renderers…

So here are some important facts to keep in mind when you implement Custom Renderers in Xamarin Forms, so that you get a good understanding about how to implement a custom renderer and what to keep in mind…

1. Always Export your Custom Renderers…

Whenever you create a custom renderer you need to Export it and register it, otherwise Xamarin would not recognise your Custom Renderer and it will go ahead with the default base class Renderer for your Custom Control.

Capture

2. Overriding the OnElementChanged Method…

Whenever a Custom Renderer is being execute, the first method it fires is the OnElementChanged() method.

This method gets called when the Rendering process starts for the custom control, which allows us the opportunity to to tap into the native properties and behaviours and modify them as we wish by overriding this method.

Also something to keep in mind this method consumes an important parameter, ElementChangedEventArgs which contains two important Properties.

  1. The OldElement property represents the Xamarin Forms level Control this renderer was attached to (previously attached to) and
  2. The NewElement property represents the Xamarin Forms level Control this renderer is currently attached to, its more of a reference.

So if you are using any Event Handlers in your Custom Renderer, you have to keep an eye out for these two properties in order to Subscribe and Unsubscribe accordingly to prevent memory leaks.

Capture1

3. Control vs Element Property…

If you think about it, Custom Renderer is more like a middle guy, in between Xamarin Forms level Control and the Native level Control, where as it’s got hooks for both levels.

So those hooks are represented by these two important properties, Control and Element.

Element property, it holds a reference to the Xamarin.Forms control that’s being rendered, so you could use this property to access anything on the Xamarin Forms level of the custom control, such as Text, WidthRequest, HeightRequest and so on.

Control property holds a reference to the Native Control being used of the Custom Control. So using this property you can straight away add your native customisations and behaviours to the Rendering Control.

3. Overriding the whole Native Control ?

What if you want to get rid of the default Native Control associated with your Custom Renderer ? Create your own Native Control and use it for your Custom Control ?

As an example You need to have a TextBox with an underneath shadow, in iOS you can’t do this with the default native UITextView, so one way to do it is by adding another UIView along with the UITextView, where as you merge two native views together to form one View.

So for instances like that, you could use the SetNativeControl() method, and pass in your custom native view, which will get rid of the default native view and override it with your custom native view.

But you have to keep in mind something very important, hence you are flushing away the default native control, you have to handle all the Behaviours (Events) of your own Native Control manually by yourself and map it back and forth with the Xamarin Forms level.

4. Creating your own Base Renderer…

For every Xamarin Forms Control, there is a Base Renderer, that maps it to the Native Level and we use those Base Renderers all the time such as Button Renderer, Label Renderer and so on.

Now what if you wanted to create your own Base Renderer ? Let’s say you are creating a total complex Custom Control by yourself, and you need to have your own Renderer for it?

YES! it is possible, you just simply have to derive your Base Renderer from the generic ViewRenderer<?,?> where as you have to pass in your Custom Renderer type name and the associating Native Control type name for the renderer.

Well actually Xamarin doesn’t really recommend this, there some instance that you need to move towards this approach.

Let me Share some Wisdom…

Xamarin Forms Custom Renderers for the Rescue.022

Here’s something interesting I really want share with your all is that, Xamarin doesn’t really require in depth Mobile Development knowledge but it is very beneficial to have some, specially in scenarios like these Custom Renderer implementation. The more you are aware of the Native development, the more advantages for you.

So if you are planning to move towards Xamarin mobile development, I would suggest you take a little look at native development as well… Which will prepare you better for your Xamarin Mobile Development journey.

Important facts to consider BEFORE implementing Custom Renderers…

Earlier I mentioned about the facts that you need to keep in mind when you implement Custom Renderers, now let’s see what are the facts you need to focus BEFORE you decide to implement Custom Renderers in your application.

 

1. Think twice…

You need to think twice before you move on towards Custom Renderer implementation for your Application. Once you get familiar with Custom Renderer implementation, you get very tempted to go for custom renderers all the time even for the simplest requirement, but trust me it is not a good practice at all.

Why I say this is because, and untold truth about Custom Renderers is that, they are a little process intensive.

Therefore it’s wise to first of all explore all the possible solutions you could come up with from Xamarin Forms level it self to solve your requirement. So do not over-use Custom Renderers just because of the ease of development.

You could also try out other alternatives such as,

  1. Xamarin Forms Controls sub-classing and forming Custom Control (by merging multiple Controls to create a new Control).
  2. Xamarin Forms Effects (which is almost like Custom Renderers but simplified).

 

2. Re-usability…

Whenever you decide to implement a Custom Renderer You need to pay attention to the reusability of it. Make sure to implement it in a way its reusable as much as possible.

When ever you implement Custom Renderers, don’t only focus on the current implementation, think ahead and implement all the possible needs in one go, without implementing custom renderers for every single need from one type of control.

Since Custom renderers are process intensive it very important to focus on reusability.

3. Mapping of Xamarin Forms -> Native Level…

Last but not least before you implement your Custom Renderer always make sure to take a look down through your Rendering Hierarchy…

Xamarin Forms Custom Renderers for the Rescue.026

Look at the available Properties and Behaviours down to the Native control and see whether it actually fulfils your requirements, in all three platforms (Android, iOS, Windows Phone). That way you will have a better idea on how to implement the Custom renderer more efficiently.

Conclusion…

Xamarin Forms Custom Renderers for the Rescue.028

Custom Renderers plays an extremely important role in Xamarin Forms development. In my opinion it’s more like the Magic behind the whole Xamarin Forms Awesomeness.

Don’t be scared of Custom Renderer’s because they are here for your rescue.

Also finally make sure to keep in mind all the important tid bits I discussed today, so it will help you implement custom renderers more efficiently and effectively. 🙂

AAAANND THAT BROUGHT US TO THE END OF THE PRESENTATION! Hope this was helpful for anyone missed this session and keep in touch everyone! 😀

Once again Thanks for the Organisers for organising this event and Microsoft for hosting. As well as the enthusiastic crowd. 🙂

– Udara Alwis
CODENAME: [ÇøŋfuzëРSøurcëÇødë]

https://www.linkedin.com/in/udaraalwis

https://www.facebook.com/confuzed.sourcecode

Ultimately Boost your Marketing Campaign with Mobile In-App Advertising

Marketing plays a key role in any organization or company, which is why we spend thousands of dollars each and every year. But have you thought for once, those usual common methods of marketing that you use to market your company, services or products are actual effective ? or do you really get the return of the investment ?

Did you know ?

Most of the time we use E-Mail Marketing or SMS Marketing, but have you ever thought whether you get the actual outcome you were expecting in the first place. The answer is NO ! and here are the reasons.

Yes E-Mail Marketing is waste !

Alright lets get an average person, We use e-mails to communicate with each other, and that was one of the main drives for e-mail marketing. That was the situation those days back in early 2000’s  !
But now the world has changed, the people, the technology, people’s lives has changed. Therefore e-mail marketing is rapidly dying, let me explain…

People have become Smarter and Competitive !

People nowadays have a higher computer literacy than the old days and most of the time people ignore the advertising e-mails that they receive and focus on the most important things they want to do with their e-mail account. Simply most of the time, when people receive any advertising or marketing e-mail, they simply report the mail address as ‘Spam’ or just easily block them as E-Mail accounts has become very easy to use and advanced in features. People’s lives today are very competitive and hectic, which leads them to always focus on the most important tasks of their lives, rather than going through spam e-mail advertisements. Therefore they always end up ignoring or blocking e-mail adverts in their mailboxes. But this could be differ if an individual has willingly signed up as a subscriber for a certain product or service.

E-Mail Service Providers are Strict and Intelligent !

Those days, in early millenium, it used to be like, whenever you send someone an email, it always gets end up in the Inbox. Using this advantage E-Mail marketing campaigns plummeted, spamming the user’s email inbox.
But nowadays, E-Mail Services providers such as Gmail, Outlook and Yahoo has become very strict and advanced in intelligence. They automatically identifies spams and advertisements and blocks them by sending them straight to the SPAM folder. They sometimes doesn’t even accept the e-mail into the account if they are for advertising purposes. Therefore nowadays most of your E-Mail marketing campaign’s e-mails are getting ended up in the customer’s SPAM folder ? which your customers never even opens. So ironically all your E-Mail marketing budget is wasted on sending e-mails to your customer’s or target audience’s SPAM folder, which is a huge waste of money.

522__300x300_stop_spam.gif (300×297)      

Nobody wants to be Annoyed or Irritated…

This is the same situation with SMS marketing, whereas users starting to get random SMS text and it gets extremely annoying for them, they simply end up blocking the SMS number easily, number blocking option is simply a click away in Smart Phones nowadays. Thats how most of the time your SMS marketing budget will also go to waste unfortunately.

We are not saying E-Mail marketing is completely useless, but it is just not evolved enough to the modern day world, for the modern lifestyle, therefore it is not much effective as it used to be and your money will go to waste for the most part. Therefore it is high time that Marketers switch to other effective alternatives.

 

Alright ! So what is the Solution for this ?

There are so many alternatives for E-Mail Marketing in real world such as Web banners, posters, mobile advertising, mobile in-app advertising and so on. We are gonna look at some alternative we think is best suited for the modern world.

 

Let me introduce you In-App Advertising !

We took all those above described issues very seriously and we have been researching ever since looking for a better solution. So we have finally summed up and came up with this solution of, advertising your ads banners in mobile apps, which is called Mobile In-App Advertising in simplest words !

 

Since the dawn of Smart Phone, it rapidly spread into the hands of every single customer as we know due to the reason they became extremely cheap. So almost every single individual possess them and the best statistic is that these users use them every single day of their lives. In that case, Mobile Apps plays a huge role which is something that people use almost all the time of the day. It is a well known fact that there are apps to almost every single needs in life nowadays and users are more tend to prefer to apps than websites and other resources, simply because of the interactivity and the ease of use.

Mobile Apps as a Marketing Media ?

All that usage, interactivity, continuous usage ? I mean what more you want ? Yes ! That is right, this is the best place to advertise !

In-app mobile advertising is seeing some of the biggest growth of all advertising media, and is becoming a major revenue source for app developers. The reason why: Smartphone users are spending more and more time with apps, not with web browsers. If you want to reach the audience of smartphone users, you need to invest in in-app mobile advertising. Mobile In-App advertising provides marketers or advertisers a much more effective and efficient ways of reaching their targeted customers and reach more audience. Below are some of the reasons why,

   

The audience is more engaged, as in the users are always using these apps, which are very interactive. In-app advertising responds to a natural evolution of how people are using their smartphones and mobile devices. People are becoming more engaged with mobile apps, instead of the mobile web.

 In-app advertising is more effective, According to a study by Appsavvy, in-app advertising performs 11.4 times better than standard banner advertising. People rarely click on regular online banner ads, as they tend to see them as intruding on the web browsing experience – visual clutter that is usually not relevant to what they are looking for.
In-app advertising (when done right) tends to be more effective because it’s unobtrusive, it blends in to the overall experience of using the app and it’s more relevant to what people want to know about. In-App advertising provides marketers the power to show the right in app ad, to the right user.

The audience for in-app ads is more sophisticated, Instead of trying to get people’s fleeting attention with online banner ads, in-app mobile advertising  puts the message in front of a self-selecting audience that tends to be more receptive to in-app advertising.
The reason is, if you’re advertising in a game or in a specific app, your in-app advertising message or offer can be highly focused and relevant to the needs of that specific audience. Chances are, your audience’s interests are going to be more closely aligned with what you’re offering in the in-app advertising. This leads to higher click-through rates and better results.

One of the trends driving growth of in-app advertising is the growing amount of time mobile users are spending on social media activity on smartphones. Another reason is that marketing monies invested in in-app ads can produce strong results beyond monetary ROI. In-app ads can provide more information about a user than browser-based use can — enabling better future targeting.

Generally speaking, the surge in the overall amount of time consumers are now spending on their devices is seeing mobile advertising rise generally. A 2012 report from the Internet Advertising Bureau (IAB) found that mobile is the fastest-growing category for advertising, with nearly 150% growth recorded last year. As a result, mobile Web-based display ads are expected to continue to be strong as well this year.

So now, Finally…

So as you can see Mobile In-App Advertising brings you a whole new level of opportunities for highly effective Advertising and Marketing. There are so many researches that are available now proving the efficiency of In-App Advertising. All the above discussed points also proves that Mobile In-App advertising is much better and effective than any old school E-Mail advertising.

            

Here are straight up advantages you get from Mobile In-App Advertising,

  • Reach a huge number of Audience easily and thereby reach a lot more customers than other advertising media.
  • Get the best results your Advertising campaign with less wastage of your budget.
  • Get your audience to truly engaged in your Adverts and banners with the interactivity capabilities of Mobile Phones.
  • Reach the exact audience you are looking for with the capabilities of Geographical identification of Mobile In-App advertising.

Source – http://socialmediainfluence.com/2012/04/22/in-app-advertising-becomes-a-multi-multi-billion-dollar-business/

The world has changed, the advertising ecosystem has also changed rapidly with the growth of technology and people’s lives. Along with that Mobile In-App Advertising has sky rocketed to the top of Advertising strategies in the modern days, where as so many  top popular companies are moving towards Mobile In-App Advertising. Therefore isn’t it high time that you move or add your Marketing Campaign for Mobile In-App Advertising ?  🙂

Are you an Advertiser ? or a Marketer ?

If so then here is a great opportunity for you to start off your In-App Advertising campaign. We have a series of very popular, creative and innovative mobiles apps developed and published to the Microsoft Windows Store which has gotten over 160,000 users worldwide and growing rapidly every day. We are now opening them up to Advertisers and Marketers to publish their Ads and Banners in our apps as Mobile In-App Ads.
We have kept all the statistical data through Google Analytics, which shows that there are thousands of users who are using our apps daily all over the world.

Below are some statistical summary of user base of our apps, where you can see the total number of users for our series of apps and the new users joining daily over 200. 🙂

Untitled

 

You can view our Series of app from below link,
http://www.windowsphone.com/en-US/store/publishers?publisherId=Udara%2BAlwis

462x120_WP_Store_blk

We could even provide all the Google Analytics of usage, geography locations, daily usage, and so on for each and every single app in a full report. Therefore if you want to advertise your ads or banners on our app and open them up to a global audience worldwide, please contact us.

We believe as we keep on innovating and developing more and more apps, there is a huge opportunity for Advertisers and Marketers in publishing in-app mobile add in our apps, as the user base will be skyrocketing.

Contact us – xtremesourcecode@live.com

So finally… Stop wasting your money and switch to Mobile In-App Advertising to ultimately Boost your Marketing Campaign profit.

Welcome to the Toastmaster Timer app for Windows Phone

Toastmasters International
Toastmasters International is a world leader in communication and leadership development. Simply put a place where anyone could improve their communication, public speaking, and leadership skills. And if you are a Toastmasters Member, or better a Member of the Exco of your TM Club, then you are in the right place.

We Believe…
We believe Smart phone should be a tool to be able to use for anything in Life, one day it might become exactly that along with all these technological advancements. Making things easier and intuitive to use or engage in real life activities, Smart Phones play a major role, whereas developers like us constantly keep on seamlessly bringing the technology closer to real life applications in order to make that Vision a Reality.

Ever been a Timer at Toastmasters Meetings ?
With that thought in mind, Have you ever been the Timer of your Toastmasters Club meetings ? Or even seen how a Timer keeps the timing of each and every Speech and Evaluation ?

If you really had that experience you may have seen them using stop watches, or using their wrist watched, or using some timer app on their mobile phone for the Timing, which is a huge pain and a distraction from the point of view of a Timer.

Being a Timer…
Because you see if you are using a timer, you have to press the start button among all the confusing buttons, and then keep in mind the Time when to show the Green Warning sign, Yellow and Red Warning signs for each and every different Speech types.
And moreover you have to keep a track of time and also hold up the Color Warning signs at the same time. And this gets even more messed up when you have to keep in mind the timing limits for each and every different kind of speech and what if you forget to show the warning signs at one point of time ? Oh my… this is a total Failure !

Don’t Worry.. We found a Solution !
But from now onwards you can Good bye to all that trouble… Let me introduce you Toastmaster Timer ! Timer Role has never been this easier.. 😉
Toastmaster Timer app for Windows Phone is the solution for all the above messed up problems you face in doing the Timer role at Toastmaster meetings. This app would make the Timer role so much easier like never before.

How to ?
How to ? Well all you have to do is Select the Type of Speech -> Click “Start” -> Turn the phone to the Speaker’s side ! 😉

f4943d77-aac1-4f54-93a0-c7ad88735af1

Yeah its incredibly simple to Use…
Yeah thats right ! its that simple ! You don’t even have to use the Warning Color Cards anymore, because Toastmaster Timer app would take care of everything. Toastmaster Timer app would display the warning colors “Green”, “Amber”, and “Red” automatically in full screen so it is visible for even longer distances from stage. And also the Timing is displayed right on the screen therefore it is easier for you and the speaker to see, all you have to do, just press “Start” and turn the phone to the speaker’s side ! Toastmaster Timer app will take care of everything automatically !

58bfe328-4c9a-4a14-a176-da754aaeda23    116d341a-4f35-46c9-abc1-a2cab22b761a

How Awesome this app is…
NO need for anymore Timers and Watches that makes the Timing process so much more complicated, when you have Toastmaster Timer app right on your Windows Phone ! What is so awesome is that, Toastmaster Timer app comes preloaded with all the Speech types and their Timing automatically, which lets you just select the Speech Type and let everything else done Automatically !

5e594b8a-ec20-40c8-a366-3171c33106ed  07018680-2734-472b-8485-28e8492e83f4  c91a0988-4140-4e46-86d3-1b6a5f1dedc4

You can even have your own Custom Timing for any speech, just select the “Custom” option from the Speeches list and you will be able to set you own Timing automated ! 😉

01b5cbe2-6b95-4987-8dc4-25d1557244af  62a7c3b4-37a8-4357-8b50-b07ef88a3427

Moreover it will create all the Timing Reports for you and you can view them, send, email them anytime as you wish..

There are a lot more Exciting features in Toastmaster Timer app, which makes the job so much easier for any Timer at Toastmaster meetings. Try out today for free ! 😀

Try out today for Free on you Windows Phone !

Toastmaster Timer

http://www.windowsphone.com/en-us/store/app/toastmaster-timer/6a71961b-b81e-4cd9-b912-4041017367d8?signin=true

#ToastmasterTimer #WindowsPhone #Nokia #Lumia #Toastmasters#TimerRole #ToastmastersInternational

So Enjoy ! Happy Toastmastering !

Another reason Why I Am At app for Windows Phone is Awesome !

Fed up of the fact that Bing Maps is pretty much useless in Sri Lanka when you need it the most being a Windows Phone User ? 😉 Very well you have nothing to worry about hereafter thanks to ‘I Am At’ app for Windows Phone !

wp_ss_20140630_0004

I Am At app uses a unique sequence of Location targeting, which increases the accuracy of location finding in any country where even Bing Maps doesn’t work !
You see, I Am At app uses the Microsoft Bing Maps Location services in the background of the app, but if by any chance Bing Map fails to find the proper information of a given Location, then our intelligent Location targeting algorithm accesses the other Mapping services such as Google Maps and seek for a much more accurate Location information and provide the user ! 😉 So that you can find your exact location Address wherever you are on Earth and Send or Share with anyone in seconds..!

Now that’s another reason why ‘I Am At’ app is so awesome ! Try it out today for free everyone ! 🙂

http://www.windowsphone.com/en-us/store/app/i-am-at/b1bcd22a-c57b-4a26-b9e2-3ec6aeb96d01?signin=true

#IAmAt #WindowsPhone #Microsoft #App #Location #Targeting #Places #Travelling #Navigation

Things I HATE about Windows Phone

We all know that there are so many things to LOVE about Windows Phone, and everyone is talking about them all over everywhere. So I was thinking why not talk about the things I HATE about Windows Phone being a huge Windows Phone as my self. Now I know what you are thinking, if I am such a huge fan, how could I have any reasons to hate it, very well just FYI, I always keep an open mind despite whatever my likes and dislikes are 😉 !
Now I must say these are based on my personal Experience with my Lumia 820 and Windows Phone 8 Version. 🙂

The keyboard

I have been an Android user for about two years back, and I have been pretty much of a heavy “texter” using the touch keyboard. With that Sony Android Keyboard experience here is my feelings with my new experience with the Windows Phone Keyboard.

Word Suggestions are so damn slow. The word suggestions are so damn slow, as in even to get a bloody word suggestion we have to type more than 50% of the letters of the particular word. SIGH !

No Automated Learning of the new words typed by the user. And if we wanna make the keyboard learn a new word, we have to manually add that by double tapping on the word while in the middle of typing. Which is extremely retarded. OMG Seriously dude ?

No proper intelligence of the Keyboard or Auto Suggestions or User keywords learning. In simple words, for me, Windows Phone keyboard is SO FUCKING DUMB ! I mean serious WTF is this shit, Microsoft could have done so much better than this seriously for a bloody keyboard. Not even a bit of intelligence, the auto suggestions suck balls, and its so bloody slow and dumb compared to Android, which is much faster and amazingly intelligent.

The Lock Screen

Yeah it sucks big time. At least Android has some pretty dotted line pattern connecting mechanism for their lock screen, and for gods sake anyone could customize it the way they want and make so epic. Alright lets keep that aside, Look at the lock screen of the
Windows Phone, its the same boring crap all over again, the number code.

At the beginning there were some rumours about an introducing of a touch pattern for the lock screen of a windows phone, and people expected a much better or a unique on Windows Phone 8 release, but still nothing ! OMG that is so sad. I am literally fed up of the bloody boring crappy lock screen I’m not using any lock screen anymore on my Windows Phone. Microsoft, you better work on this for gods sake !

Web Browser

Oki when it comes to a mobile Web browser plays a very significant role, because that is like the general gateway to access the internet despite of the Apps. Oh really ? Yeah everyone knows that ! but does Microsoft know that ? or the Windows Phone team ? :O

Serious the default web browser in Windows Phone is the worst browsing experience I ever had since my very old Nokia phone web browser.

Yeah !  the default web browser is a total shiaaat !  Hope most of you have experience with the crappy browser of Windows Phone. Most of the sites with modern OPEN GL, HTML 5, JQuery does not work properly, well most of the time does not work at all with this crappy browser. And it is such a pain in the a**. All those stunning and cool web graphics can even be opened in the Windows Phone web browser.

There is completely no way to replace the Default Web browser in Windows Phone.  Alright it is fine that Windows Phone team at Microsoft has failed to build a better browser for Windows Phone, but they haven’t even given any space for the User to replace their crappy browser with a better one, if there are any better web browsers for Windows Phone. Withe their bullshit restricted system permissions, this isn’t even close to being possible. Everyone is stuck with their default shiiiiiiiat ! -____-

Popular Apps suck ! except for Some !

Have you used Facebook app on Android ? or iPhone ? aaaaaand then have you ever used the Facebook app for Windows Phone ? 😛 I know right ! OMG the official App for Windows Phone sucks big time, literally. I mean there is very less options, features and graphics. And the app crashes constantly out of nowhere.

We all have amazing experiences  with those most popular apps on Android and iPhone, such as Facebook, twitter, instagram and so on. Well after a while those apps also came into Windows Phone marketplace and everyone was so excited. But turned out to be a total disappointing experience.  I have used the Android app for Facebook, I mean I loved it, it had all the features , beautiful and easy to use User Interface all of that. But then when I used the Facebook app for Windows Phone, OMG ! It was a huuuuuuuge mess !

I think this is because of the restricted nature of the Windows Phone app development platform. Considering the fact that Android and iOS app development platforms has given almost all the access for the Mobile device’s hardware and software features from the SDK but when it comes to Windows Phone it is very restricted. So the developers can’t, well actually pretty much hard to recreate the same great experiences we had on those same apps on Android and iOS. 🙂 Now that is a huge drawback for Windows Phone. I think it would have been better like, if they had discussed and given some more special access to those companies through the SDK to develop rich experienced applications.

But this situation is actually getting better, I recently used the Faceboo Beta app for Windows Phone, turned out to be so much better than the official one in the Store. And also same with Twitter and Instagram. But there are so many popular apps out there in other platforms who are struggling to provide the same fantastic experience for their users on Windows Phone, due to the strictness in the Windows Phone Development Platform.

No Seek Bar on Media Players

This may have not been a huge issue for everyone, but there is no go damn Seek bar in the Music player and the default Video Player in Windows Phone. I mean THE SEEK bar is like a very  basic requirement in any Media Player app, but unfortunately Windows Phone ! 😦 Sigh. Which is a huge disadvantage specially watching movies.

Bing Maps is a useless mess in Sri Lanka

Yeah to be frank, Bing Maps is a total shitty Joke in Sri Lanka. If you are a Windows Phone user from Sri Lanka you may know what a pain in the a** it is to use Bing Maps in Sri Lanka. I mean most of the Roads, Shops, and Places can not be found on Bing Maps in Sri Lanka, I mean even for any emergency the Bing Map search returns nothing at all. It is an utter waste to even try to use Bing maps in Sri Lanka, even though somewhat the roads are a bit accurate.

Not only bing maps, their series of Places, Location and Direction based apps are not working at all in Sri Lanka for the most part such as City Lens, HERE Drive and so on. This is a huge mess, I mean even if you try to find a place bear by to Eat, it is merely impossible only one or two places will be shown out of ten, even though for the most part it shows nothing at all. I sometimes wonder whether this is because Sri Lanka is a third world country and they don’t give a rats a** about third world countries ? 😛
As a past Android user I must say, Google Maps shows almost everything with 100% accuracy, finding any place or location or even roads. Personally for me this was a huge disappointment as a user who uses Maps to navigate all the time.

The map can not be rotated as the User wish, only Zoom in and Zoom out options are available. Seriously ? I mean WTF ? When it comes to even a paper map we always rotate it this side and that side when we are trying to navigate. But in Bing Maps ? NO ROTATING ! Sigh 😦 ! Hopefully I wish they would look into these issues in Windows 8.1 update. 🙂

So that is it for now… as a Fan Boy thoughts on Windows Phone. You might say why such hatred if you call your self a Windows Phone Fan boy ? 😛 Well human, I always keep my mind open doesn’t matter whatever I love and I like to see everything as they truly are in every aspect. 😉

ADIOS FOLKS ! 😀

I Am Feeling………….. Your Feelings and Emotions towards your Success !

Know your Mind…

Human Feelings and Emotions are a most important factor of our Lives as Humans. We as Humans, posses different Feelings and Emotions at different Situations and Different Places. There is a pattern which these Feelings and Emotions occur according to the above factors, which is actually very different from each one of us as we all are Unique from one another. We all want to live healthy life, where as both Mental and Physical health matters…

Healthy Mind…

but in both of them, Mental health is the most important one, as our minds, thoughts and feelings drive everything we do. According to psychology if we could track and see the pattern of our own Feelings and Emotions then we could use it to alter it self for our own Success ! But how could we keep track of our own Feelings and Emotions according to these different situations and places.. Now that is why we came up with a Solution !

Eureka ! psst.. wait !

So We have been trying for a solution for this devastating situation, and we finally came up with a successful answer,
“I Am Feeling”
Know your own mind…
across it self… learn it..
succeed yourself..
Yes, this is kind of a radical thought, what if you could keep a track of all your daily feelings and emotions during those different situations you go through every single day ? Now in that way…

We Welcome You !

We could learn our own Minds, our emotions, feelings to those different situations and places and alter them in order to Succeed !
Ultimately we all want to lead a mentally healthy life filled with positive thoughts, which in case this solution lets you to recognize those moments and improve them towards your success. Keep track of your own Progression of Positive thoughts, and learn yourself to succeed…

Waiting is over….

And finally it is here…..

Welcome to the ‘I Am Feeling’ App !

Welcome to the revolutionary amazing Windows Phone App,
I Am Feeling – Track your own Feelings and Emotions to learn yourself and Succeed !  Try out today for #free on your Windows Phone !

#IAmFeeling #WindowsPhone #Nokia #Lumia #WP8 #WP81 #psychology#mind #health

http://www.windowsphone.com/en-us/store/app/i-am-feeling/95e6c318-0b81-4b09-bea9-787480803079?signin=true

This app would let you easily keep track of your own Feelings and Emotions at anytime, anywhere in your daily Life, then finally allow you to monitor them and evaluate by your self to see your own progress or even to recognize what is required to improve your mental health…
We have crafted this app with Simplicity, User Friendly Experience, and Intuitive Feedback for Yourself and moreover to give you a joyful experience right from the app.
So try out this revolutionary App today !
Learn Your Mind, Your Feelings and Emotions, Learn Yourself… Speak to Your own Self.. and Succeed !

Some amazing features we bring you –

  • Keep track of all your Feelings and Emotions at anytime, anywhere in your Daily Life…
  • Keep track of all the different Places you have experienced those Feelings and Emotions…
  • Monitor yourself and your mind with extensive feedback right from the app based on your own Feelings, Places and Situations…
  • Get to know how you could Change your lifestyle, thinking, and places you visit in order to succeed yourself easily for any kind of achievement…
  • See how your mind has been fluctuating through Positivity and Negativity throughout different times, places and situations…
  • See for yourself What kind of Feelings and Emotions you experience the most, and moreover based on the Places you were at those situations…
  • Monitor your own specialized Feelings and Places Map…
  • Learn your own Mind and Yourself, and identify how you could change the way you think, do, and places you visit, and how to adopt yourself to Succeed !

We would love to hear your feedback… We count on it.. 🙂

Comment below or drop us a mail ! 😉
xtremesourcecode@live.com

 

 

 

 

Some of the Windows Phone Apps that I have developed so far…

Hello folks, here is the Microsoft Windows Phone marketplace link for the Apps which I have developed so far… 🙂 So far I have developed 19 apps to this day, 18th August 2013. 😀

If you are a Windows Phone user, I dare you check it out, there are some pretty cool useful and handy apps ! 😉

Here is the link –
http://www.windowsphone.com/en-us/store/search?q=Udara+Alwis

Have fun folks ! (^__^)