Delay's Blog is the blog of David Anson, a Microsoft developer who works with the Silverlight, WPF, Windows Phone, and web platforms.
http://dlaa.me/
@DavidAns
As computing devices have become more powerful, the trend has been toward more "fluid" user interfaces - interaction models that flow smoothly from one state to another. This differs from earlier approaches where resources were more limited and interactions tended to be Spartan and isolated from each another. Some of the motivation behind an increased focus on fluid UI is almost certainly the "wow" factor; modern interfaces can be quite attractive and fun to use! But there's also scientific research to back this up: people tend to find smooth transitions less disruptive to their workflow than abrupt ones - and the animation itself can help tie the "before" and "after" states together by showing how one becomes the other.
With that in mind, one of the things I've wanted to do is apply this principle to enhance the user experience for Silverlight applications on the Windows Phone platform. Specifically, I wanted to make it easy for developers to animate the orientation change of an application that occurs when the phone is rotated from its default portrait orientation to landscape. This is one of those cases where a picture is worth a thousand words, so I've created a short video showing the default behavior of a Silverlight-based Windows Phone application when the device (in this case the emulator) is rotated.
Click the image below to view a brief H.264-encoded MP4 video of the default rotation behavior:
For people who have never used the emulator: those two buttons I click rotate the device one quarter turn clockwise or counter-clockwise. I begin by rotating counter-clockwise once, then clockwise once back to the starting orientation, then clockwise three more times to loop all the way around.
What I show above is what you get for free when you create a new application - and it's great the device and platform support dynamic orientation changes without any special effort! But I thought it would be cool if I could extend that just a bit in order to animate those orientation changes - again, without requiring the developer to change anything (beyond a couple of superficial name changes).
Click the image below to view a short video of the animated behavior I've created:
As in the first video, I show the device rotating to landscape, then back, then all the way around. But this time I've included a little bit of fun at the end. :)
The custom rotation behavior is made possible by the AnimateOrientationChangesPage class I created which works by lying to the layout system (Now, where have I heard that before?). It's a small, self-contained class you insert into the default hierarchy and then never need to worry about again. AnimateOrientationChangesPage automatically gets involved with the necessary steps for rotation and even handles page-to-page navigation changes seamlessly.
AnimateOrientationChangesPage
My goal was to make it easy for Windows Phone applications to offer the kind of fluid rotation experience that's becoming common these days - and it seems like AnimateOrientationChangesPage does that. I hope you find it useful!
[Click here to download the AnimateOrientationChanges sample for the Windows Phone 7 platform.]
Notes:
MainPage.xaml
AnimateOrientationChangesPage.cs
// Remove this #define when using more recent phone/tools builds #define APRIL_TOOLS
MainPage
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
MainPage.cs
using System; // ... using Delay; namespace WindowsPhoneApplication1 { public partial class MainPage : AnimateOrientationChangesPage { // ... } }
MainPage.cs.xaml
<delay:AnimateOrientationChangesPage x:Class="WindowsPhoneApplication1.MainPage" xmlns:delay="clr-namespace:Delay" ...> <!-- ... --> </delay:AnimateOrientationChangesPage>
Duration
EasingFunction
IsAnimationEnabled
false
PortraitDown
case