Pythonで推し鑑賞スマホアプリを作る2 時計アプリになった
前回、とりあえずスリープ禁止で推しの画像をずーっと表示するアプリを作りました。
さすがにそれだけだとつまらないので、アニメーションをつけたりしようと思います。
まばたき
まずはまばたき。
目を閉じた画像を用意して、画像を切り替えることでまたばきを実現します。
以下のメソッドを追加。
def do_blink(self, dt):
self.ids.himari_image.source = "image/blink.png"
Clock.schedule_once(lambda dt: setattr(self.ids.himari_image, 'source', 'image/normal.png'), 0.1) # 0.1秒後に戻す以下のように__init__からコールすると、5秒毎にまばたきします。
より自然にするため、最終的にはメソッド自体は1秒間隔でコールして、ランダムでまばたきするタイミングをずらしています。
Clock.schedule_interval(self.do_blink, 5) # 5秒ごとに瞬きImageにIDを指定するので、kvファイルに、
id: himari_image
を追加する。
<MyRoot>:
orientation: 'vertical'
Image:
id: himari_image # ← これ追加!
allow_stretch: True
keep_ratio: True
source: "image/normal.png"
size: self.parent.size
pos: self.parent.pos横モード
作っているうちに、横のほうがいいなぁ、と思い始めたので、横で起動するように設定を変更する。
buildozer.spec のorientationをlandscapeに変更する。
デフォルトは、portrait。

全画面表示
ついでに全画面にしようと思うので、buildozer.spec のfullscreenを1に設定する。
画像もサイズ変更したものを作り直す。
フルスクリーンにすると、起動時にフガフガするけど、大きくみたいので今回は目をつぶる。
起動時だけだし。
自分のスマホが古いからか(android 8)、buildozerだとそういうものなのかは不明。

時計
推しだけでもいいけど、ずーっと表示しているなら時計くらいあってもいいかなぁと思って時計を表示する。
メソッドのコールは1秒間隔。
下の備考にも書いてありますが、時間、コロン、分を1つの文字列にまとめて楽に表示することもできますが、それだと微妙にコロンの位置が下にずれて気になるので、あえて分割して表示。
"""
機能:時計表示
備考:まとめるとコロンの位置が微妙に低いのであえて分割
"""
def update_time(self, dt):
# 時間
self.ids.clock_label1.text = datetime.now().strftime("%H")
# コロンの点滅
if self.lastclock == 0:
self.ids.clock_label2.text = ":"
self.lastclock = 1
else:
self.ids.clock_label2.text = ""
self.lastclock = 0
# 分
self.ids.clock_label3.text = datetime.now().strftime("%M")kvファイルにもラベル定義を追加する。
同じようなのを3つ分。x座標だけずらす。
PC表示と実際のスマホの表示が微妙に異なるので、実機でも確認しながら調整します。
Label:
id: clock_label1
font_size: dp(100)
pos_hint: {"center_x": 0.15, "center_y": 0.5}
color: 0.3, 0.3, 0.3, 1
text: ""
size_hint: None, None
size: self.texture_sizeこの時点でこんな感じ
推し鑑賞というよりすっかり推し時計アプリみたいになりました。

コロンもちょい上でもいいかな…
時計を表示させることで実用性も出ましたが、もうちょっといろいろ表示させたいなぁ。
背景が何もないのもさみしいのかも。
続きます。
