Added DotMatrixClock Sample
This commit is contained in:
parent
f1e203c325
commit
4248652123
|
@ -0,0 +1,170 @@
|
|||
using System;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace DotMatrixClock
|
||||
{
|
||||
public partial class DotMatrixClockPage : ContentPage
|
||||
{
|
||||
// Total dots horizontally and vertically.
|
||||
const int horzDots = 41;
|
||||
const int vertDots = 7;
|
||||
|
||||
// 5 x 7 dot matrix patterns for 0 through 9.
|
||||
static readonly int[, ,] numberPatterns = new int[10, 7, 5]
|
||||
{
|
||||
{
|
||||
{ 0, 1, 1, 1, 0}, { 1, 0, 0, 0, 1}, { 1, 0, 0, 1, 1}, { 1, 0, 1, 0, 1},
|
||||
{ 1, 1, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 0, 0, 1, 0, 0}, { 0, 1, 1, 0, 0}, { 0, 0, 1, 0, 0}, { 0, 0, 1, 0, 0},
|
||||
{ 0, 0, 1, 0, 0}, { 0, 0, 1, 0, 0}, { 0, 1, 1, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 0, 1, 1, 1, 0}, { 1, 0, 0, 0, 1}, { 0, 0, 0, 0, 1}, { 0, 0, 0, 1, 0},
|
||||
{ 0, 0, 1, 0, 0}, { 0, 1, 0, 0, 0}, { 1, 1, 1, 1, 1}
|
||||
},
|
||||
{
|
||||
{ 1, 1, 1, 1, 1}, { 0, 0, 0, 1, 0}, { 0, 0, 1, 0, 0}, { 0, 0, 0, 1, 0},
|
||||
{ 0, 0, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 0, 0, 0, 1, 0}, { 0, 0, 1, 1, 0}, { 0, 1, 0, 1, 0}, { 1, 0, 0, 1, 0},
|
||||
{ 1, 1, 1, 1, 1}, { 0, 0, 0, 1, 0}, { 0, 0, 0, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 1, 1, 1, 1, 1}, { 1, 0, 0, 0, 0}, { 1, 1, 1, 1, 0}, { 0, 0, 0, 0, 1},
|
||||
{ 0, 0, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 0, 0, 1, 1, 0}, { 0, 1, 0, 0, 0}, { 1, 0, 0, 0, 0}, { 1, 1, 1, 1, 0},
|
||||
{ 1, 0, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 1}, { 0, 0, 0, 1, 0}, { 0, 0, 1, 0, 0},
|
||||
{ 0, 1, 0, 0, 0}, { 0, 1, 0, 0, 0}, { 0, 1, 0, 0, 0}
|
||||
},
|
||||
{
|
||||
{ 0, 1, 1, 1, 0}, { 1, 0, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 0},
|
||||
{ 1, 0, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 0}
|
||||
},
|
||||
{
|
||||
{ 0, 1, 1, 1, 0}, { 1, 0, 0, 0, 1}, { 1, 0, 0, 0, 1}, { 0, 1, 1, 1, 1},
|
||||
{ 0, 0, 0, 0, 1}, { 0, 0, 0, 1, 0}, { 0, 1, 1, 0, 0}
|
||||
},
|
||||
};
|
||||
|
||||
// Dot matrix pattern for a colon.
|
||||
static readonly int[,] colonPattern = new int[7, 2]
|
||||
{
|
||||
{ 0, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 }
|
||||
};
|
||||
|
||||
// BoxView colors for on and off.
|
||||
static readonly Color colorOn = Color.Red;
|
||||
static readonly Color colorOff = new Color(0.5, 0.5, 0.5, 0.25);
|
||||
|
||||
// Box views for 6 digits, 7 rows, 5 columns.
|
||||
BoxView[, ,] digitBoxViews = new BoxView[6, 7, 5];
|
||||
|
||||
public DotMatrixClockPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// BoxView dot dimensions.
|
||||
double height = 0.85 / vertDots;
|
||||
double width = 0.85 / horzDots;
|
||||
|
||||
// Create and assemble the BoxViews.
|
||||
double xIncrement = 1.0 / (horzDots - 1);
|
||||
double yIncrement = 1.0 / (vertDots - 1);
|
||||
double x = 0;
|
||||
|
||||
for (int digit = 0; digit < 6; digit++)
|
||||
{
|
||||
for (int col = 0; col < 5; col++)
|
||||
{
|
||||
double y = 0;
|
||||
|
||||
for (int row = 0; row < 7; row++)
|
||||
{
|
||||
// Create the digit BoxView and add to layout.
|
||||
BoxView boxView = new BoxView();
|
||||
digitBoxViews[digit, row, col] = boxView;
|
||||
absoluteLayout.Children.Add(boxView,
|
||||
new Rectangle(x, y, width, height),
|
||||
AbsoluteLayoutFlags.All);
|
||||
y += yIncrement;
|
||||
}
|
||||
x += xIncrement;
|
||||
}
|
||||
x += xIncrement;
|
||||
|
||||
// Colons between the hours, minutes, and seconds.
|
||||
if (digit == 1 || digit == 3)
|
||||
{
|
||||
int colon = digit / 2;
|
||||
|
||||
for (int col = 0; col < 2; col++)
|
||||
{
|
||||
double y = 0;
|
||||
|
||||
for (int row = 0; row < 7; row++)
|
||||
{
|
||||
// Create the BoxView and set the color.
|
||||
BoxView boxView = new BoxView
|
||||
{
|
||||
Color = colonPattern[row, col] == 1 ?
|
||||
colorOn : colorOff
|
||||
};
|
||||
absoluteLayout.Children.Add(boxView,
|
||||
new Rectangle(x, y, width, height),
|
||||
AbsoluteLayoutFlags.All);
|
||||
y += yIncrement;
|
||||
}
|
||||
x += xIncrement;
|
||||
}
|
||||
x += xIncrement;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the timer and initialize with a manual call.
|
||||
Device.StartTimer(TimeSpan.FromSeconds(1), OnTimer);
|
||||
OnTimer();
|
||||
}
|
||||
|
||||
void OnPageSizeChanged(object sender, EventArgs args)
|
||||
{
|
||||
// No chance a display will have an aspect ratio > 41:7
|
||||
absoluteLayout.HeightRequest = vertDots * Width / horzDots;
|
||||
}
|
||||
|
||||
bool OnTimer()
|
||||
{
|
||||
DateTime dateTime = DateTime.Now;
|
||||
|
||||
// Convert 24-hour clock to 12-hour clock.
|
||||
int hour = (dateTime.Hour + 11) % 12 + 1;
|
||||
|
||||
// Set the dot colors for each digit separately.
|
||||
SetDotMatrix(0, hour / 10);
|
||||
SetDotMatrix(1, hour % 10);
|
||||
SetDotMatrix(2, dateTime.Minute / 10);
|
||||
SetDotMatrix(3, dateTime.Minute % 10);
|
||||
SetDotMatrix(4, dateTime.Second / 10);
|
||||
SetDotMatrix(5, dateTime.Second % 10);
|
||||
return true;
|
||||
}
|
||||
|
||||
void SetDotMatrix(int index, int digit)
|
||||
{
|
||||
for (int row = 0; row < 7; row++)
|
||||
for (int col = 0; col < 5; col++)
|
||||
{
|
||||
bool isOn = numberPatterns[digit, row, col] == 1;
|
||||
Color color = isOn ? colorOn : colorOff;
|
||||
digitBoxViews[index, row, col].Color = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:local="clr-namespace:DotMatrixClock"
|
||||
x:Class="DotMatrixClock.DotMatrixClockPage"
|
||||
Padding="10"
|
||||
SizeChanged="OnPageSizeChanged">
|
||||
<AbsoluteLayout x:Name="absoluteLayout"
|
||||
VerticalOptions="Center" />
|
||||
</ContentPage>
|
|
@ -0,0 +1,21 @@
|
|||
using Ooui;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Samples
|
||||
{
|
||||
public class DotMatrixClockSample : ISample
|
||||
{
|
||||
public string Title => "Xamarin.Forms DoMatrixClock";
|
||||
|
||||
public Ooui.Element CreateElement()
|
||||
{
|
||||
var page = new DotMatrixClock.DotMatrixClockPage();
|
||||
return page.GetOouiElement();
|
||||
}
|
||||
|
||||
public void Publish()
|
||||
{
|
||||
UI.Publish("/dotmatrixclock", CreateElement);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -30,6 +30,7 @@ namespace Samples
|
|||
new DrawSample ().Publish ();
|
||||
new FilesSample ().Publish ();
|
||||
new DisplayAlertSample ().Publish ();
|
||||
new DotMatrixClockSample().Publish();
|
||||
new EditorSample().Publish();
|
||||
new TipCalcSample().Publish();
|
||||
new XuzzleSample().Publish();
|
||||
|
|
|
@ -38,6 +38,9 @@
|
|||
<EmbeddedResource Update="DisplayAlertPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="DotMatrixClock\DotMatrixClockPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="TipCalc\TipCalcPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
|
@ -49,6 +52,7 @@
|
|||
<ItemGroup>
|
||||
<None Remove="BugSweeper\Images\RedBug.png" />
|
||||
<None Remove="BugSweeper\Images\Xamarin120.png" />
|
||||
<None Remove="DotMatrixClock\DotMatrixClockPage.xaml" />
|
||||
<None Remove="TipCalc\TipCalcPage.xaml" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
|
|
Loading…
Reference in New Issue