dateTime.Hourを使い時間を表示します。
一定間隔で何かを実行させたい場合や、指定した時間に実行させたい場合などに使用します。
ファイル --> 新規作成 --> プロジェクト(P)... --> Cross-Platform --> Xamarin-Forms で作成
DigitalClockPage02
DotMatrixClockPage.cs 追加
DotMatrixClockPage.cs の書き換え
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace DigitalClockPage02
{
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;
}
}
}
}
App.cs の書き換え
App.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
namespace DigitalClockPage02
{
public class App : Application
{
public App()
{
// The root page of your
application
MainPage = new
DotMatrixClockPage();
}
}
}
▫️参考ページ
【Xamarin.Forms】 AbsoluteLayoutでプロポーショナルレイアウト
Xamarin.Forms の Absolute Layout を使用するには
Xamarin で ItemsControl 風 AbsoluteLayout
Xamarin.Forms AbsoluteLayout Recipe
Demystifying Xamarin Forms AbsoluteLayout and RelativeLayout positioning.
コメントをお書きください