Introduction

In this article we will show an animation of a moving ball in a Windows Phone application through the ApplicationBar code buttons start and stop. In this animation we will add a storyboard_Completed event that will move the ellipse and also check for collisions against the layoutroots dimensions. When a collision happens the direction will be reversed. The way that the start and stop buttons work are, when the user clicks the start button the IsBouncing property of the control is true and the ball begins to move in the phone screen and simply when the stop button is clicked the Isbouncing property is set to false and the ball will be stop. To move the ball in the phone's screen we will create a method startMove() in code behind; the speed and direction of the ball will be set randomly.

Step 1 : Open Visual Studio.
  • Select new -> project
  • Select your preferred language
  • Select Silverlight for Windows Phone application
  • Name the project
  • Now name of project is "MovingBallApplication"

clock1.gif

clock2.gif

Step 2: Now make some modification on MainPage.xaml page.

Step 3 : The whole code of the MainPage.xaml page is:

Code

<phone:PhoneApplicationPage

x:Class="MovingBallApplication.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"

xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

FontFamily="{StaticResource PhoneFontFamilyNormal}"

FontSize="{StaticResource PhoneFontSizeNormal}"

Foreground="{StaticResource PhoneForegroundBrush}"

SupportedOrientations="Portrait" Orientation="Portrait"

mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="696"

shell:SystemTray.IsVisible="True">

<UserControl.Resources>

<!-- Game loop -->

<Storyboard x:Name="ellipseStoryboard" Completed="ellipseStoryboard_Completed">

</Storyboard>

</UserControl.Resources>

<!--LayoutRoot contains the root grid where all other page content is placed-->

<Grid x:Name="LayoutRoot" Background="Transparent">

<Grid.RowDefinitions>

<RowDefinition Height="Auto"/>

<RowDefinition Height="*"/>

</Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title-->

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="24,24,0,12">

<TextBlock x:Name="ApplicationTitle" Text="Animation" Style="{StaticResource PhoneTextNormalStyle}"/>

<TextBlock x:Name="PageTitle" Text="Moving Ball" Margin="-3,-8,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>

</StackPanel>

<!--ContentPanel - place additional content here-->

<Canvas x:Name="ContentCanvas" Grid.Row="1">

<Ellipse Canvas.Left="350" Canvas.Top="150" Width="100" Height="100" Name="ellipseObject" Canvas.ZIndex="1" >

<Ellipse.Fill>

<LinearGradientBrush StartPoint='0.1,0.06' EndPoint='0.5,0.6'>

<GradientStop Color='#FFFFFFFF' Offset='0'/>

<GradientStop Color="#FFBF1BB2" Offset='1'/>

</LinearGradientBrush>

</Ellipse.Fill>

</Ellipse>

<Canvas.Background>

<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">

<GradientStop Color="Black" Offset="0" />

<GradientStop Color="White" Offset="1" />

</LinearGradientBrush>

</Canvas.Background>

</Canvas>

</Grid>

<phone:PhoneApplicationPage.ApplicationBar>

<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">

<shell:ApplicationBarIconButton x:Name="appbar_button1" IconUri="/Images/start-button.png" Text="Start a new bounce" Click="appbar_button1_Click" ></shell:ApplicationBarIconButton>

<shell:ApplicationBarIconButton x:Name="appbar_button2" IconUri="/Images/inward_black_stop.png" Text="Stop bounce" Click="appbar_button2_Click" ></shell:ApplicationBarIconButton>

</shell:ApplicationBar>

</phone:PhoneApplicationPage.ApplicationBar>

</phone:PhoneApplicationPage>



img1.gif

Step 4 : Now we will do the code behind file MainPage.xaml.

Step 5 : The final source code of the MainPage.xaml.cs file is:

Code

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using Microsoft.Phone.Controls;

using Microsoft.Phone.Shell;

namespace MovingBallApplication

{

public partial class MainPage : PhoneApplicationPage

{

#region Instance members and Constructors

private int xVelocity = 5;

private int yVelocity = 5;

private bool isBouncing = false;

// Constructor

public MainPage()

{

InitializeComponent();

}

private void startMoving()

{

//Make speed, direction random

Random r = new Random();

xVelocity = r.Next(3, 10);

yVelocity = r.Next(3, 10);

int coin = r.Next(100);

if (coin > 50)

{

xVelocity *= -1;

}

coin = r.Next(100);

if (coin > 50)

{

yVelocity *= -1;

}

ellipseStoryboard.Begin();

isBouncing = true;

}

private void appbar_button1_Click(object sender, EventArgs e)

{

startMoving();

}

private void appbar_button2_Click(object sender, EventArgs e)

{

ellipseStoryboard.Stop();

isBouncing = false;

}

}

}

Step 6 : Press F5 to run the application.

Output

img2.gif

Resources

Animations in Silverlight for Windows Phone 7
Simple Animation in Windows Phone 7
Creating a Bouncing Ball in Windows 8 Metro Style Applications
Magic Eight Ball on the Windows Phone 7