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 DrawSample ().Publish ();
|
||||||
new FilesSample ().Publish ();
|
new FilesSample ().Publish ();
|
||||||
new DisplayAlertSample ().Publish ();
|
new DisplayAlertSample ().Publish ();
|
||||||
|
new DotMatrixClockSample().Publish();
|
||||||
new EditorSample().Publish();
|
new EditorSample().Publish();
|
||||||
new TipCalcSample().Publish();
|
new TipCalcSample().Publish();
|
||||||
new XuzzleSample().Publish();
|
new XuzzleSample().Publish();
|
||||||
|
|
|
@ -38,6 +38,9 @@
|
||||||
<EmbeddedResource Update="DisplayAlertPage.xaml">
|
<EmbeddedResource Update="DisplayAlertPage.xaml">
|
||||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="DotMatrixClock\DotMatrixClockPage.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Update="TipCalc\TipCalcPage.xaml">
|
<EmbeddedResource Update="TipCalc\TipCalcPage.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
@ -49,6 +52,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="BugSweeper\Images\RedBug.png" />
|
<None Remove="BugSweeper\Images\RedBug.png" />
|
||||||
<None Remove="BugSweeper\Images\Xamarin120.png" />
|
<None Remove="BugSweeper\Images\Xamarin120.png" />
|
||||||
|
<None Remove="DotMatrixClock\DotMatrixClockPage.xaml" />
|
||||||
<None Remove="TipCalc\TipCalcPage.xaml" />
|
<None Remove="TipCalc\TipCalcPage.xaml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|
Loading…
Reference in New Issue