本記事は、株式会社 函館ラボラトリが運営する「Bラボ」における、大人向け「看板アプリ(デジタルサイネージ)を作るコース」用教材テキストです。
- 【Bラボデジタルサイネージ1】Processing+ラズパイでデジタルサイネージを作る!
- 【Bラボデジタルサイネージ2】ラズパイ初期設定
- 【Bラボデジタルサイネージ3】準備プログラム作成&機能実現の方針決定
- 【Bラボデジタルサイネージ4】レイアウトの基準になるグリッドを表示する「GridModule」
- 【Bラボデジタルサイネージ5】レイアウトの基準になる枠を表示する「PlaceholderModule」
- 【Bラボデジタルサイネージ6】画像を全画面表示する「FullImageModule」
- 【Bラボデジタルサイネージ7】ページの自動切り替え
- 【Bラボデジタルサイネージ8】設置されている場所の名前を表示する「LocationModule」
- 【Bラボデジタルサイネージ9】現在の時間を表示する「DateModule」
- 【Bラボデジタルサイネージ10】ページ切り替えの時間が分かる「ProgressBarModule」
- 【Bラボデジタルサイネージ11】現在の表示中のページが分かる「PageControlModule」
- 【Bラボデジタルサイネージ12】現在の天気を表示する「WeatherRModule」
- 【Bラボデジタルサイネージ13】直近2件のバス時刻表を表示する「BusRModule」
- 【Bラボデジタルサイネージ14】ごみ出しカレンダーを表示する「GomiRModule」
- 【Bラボデジタルサイネージ15】(発展編)ツイートを表示する「TwitterRModule」
- 【Bラボデジタルサイネージ16】開店/閉店を表示する「OpenCloseRModule」
- 【Bラボデジタルサイネージ17】部屋の温度を表示する「TemperatureRModule」
- 【Bラボデジタルサイネージ18】部屋の明るさを表示する「BrightnessRModule」
- 【Bラボデジタルサイネージ19】起動画面を表示する「LaunchingScreenModule」
- 【Bラボデジタルサイネージ20】RModuleの影を実装
作るもの
画面下の緑のバーで、ページが切り替わる大体のタイミングがわかるようになります。
実装準備
まずは、ProgressBarModuleの高さを20pxとして、高さを表す変数を定義します。
/* 略 */
final int MODULE_RECT_ROUND = 30;
final int PROGRESSBAR_HEIGHT = 20; /* 追加 */
/* 略 */
新しいファイルM_ProgressBar.pde
を作ります。
ファイルの中で、ProgressBarModuleの描画用関数drawProgressBarModule()
を作ります。
/* ここから追加 */
void drawProgressBarModule() {
}
/* ここまで追加 */
塗りつぶす割合を算出
ProgressBarModuleは、1秒ごとに一定の割合で、緑に塗りつぶされる面積が増えていきます。
画面が切り替わるまでの時間感覚が10秒の場合(STAY_SECOND = 10)、9秒経過した時点で100%塗り潰され(下図)、
10秒経過した時点で次のページに切り替わり、ProgressBarModuleは真っ白にリセットされます(下図)。
この割合を算出してみましょう。
0秒時点で0%、9秒時点で100%塗り潰されるとすると、プログラムはこのようになります。
void drawProgressBarModule() {
float progressRate = (second % STAY_SECOND) / float(STAY_SECOND-1); /* 追加 */
}
progressRate
の値は、0.0(0%)〜1.0(100%)の範囲をとります。
このprogressRate
を使って、progressBarを描画してみます。
void drawProgressBarModule() {
float progressRate = (second % STAY_SECOND) / float(STAY_SECOND-1);
/* ここから追加 */
noStroke();
fill(WHITE_COLOR);
rect(0, height-PROGRESSBAR_HEIGHT, width, PROGRESSBAR_HEIGHT);
fill(GREEN_COLOR);
rect(0, height-PROGRESSBAR_HEIGHT, width * progressRate, PROGRESSBAR_HEIGHT);
/* ここまで追加 */
}
横幅いっぱいに白色バーを表示し、その上にprogressRate
に応じた横幅の緑色バーを上乗せしています。
関数が完成したので、drawModules()
内で呼び出してみましょう。
void drawModules() {
if (nowPageID == 0) {
drawFullImageModule(background);
drawGridModule();
drawPlaceholderModule();
} else if (nowPageID == 1) {
drawFullImageModule(adImage[0]);
}
drawDateModule();
drawLocationModule();
drawProgressBarModule(); /* 追加 */
}
追加したあとに実行してみると、1秒ごとに緑色の面積が増えていくようになっています。
最後に
これで、ページ切り替えの時間が分かる「ProgressBarModule」が実装できました。
次は、**現在の表示中のページが分かる「PageControlModule」**を実装してみましょう。