タブレット用プログラムの書き止め

android OS & iPadOS の記録。

【kotlin】 画像ビュワー画像送りを再考

2024-03-09 01:23:46 | Android studio 日記

タブレット横長の状態でJPG、PNGを表示。
ディレクトリ単位でリスト化してインデックスNoで表示画像をコントロール。


表示モードは1枚、2枚単位で。
1枚表示モードで画像が縦長1枚は270度回転。
2枚表示モードで縦長2枚は左右並びで2枚表示。
画像が横長なら1枚表示に切り替え。

 

ファイルフルパスをリストアップして順番に取り出し表示させるのが基本。
1枚か2枚の固定であれば難しくないのだが。

条件分岐させるので面倒である。

Javaの時は複雑になってしまった。
Kotlinでは簡素化を心掛けデータ構成。

現在表示されているファイルリストの
Index Noを TargetNo
ファイル名を TargetFileName
そのタイプを TargetShape  // 縦長、横長
サブファイル TargatSubFileName
サブタイプを TargetSubShape

次の表示の為に準備する情報を
NextTargetNo
NextTargetFileName
NextTargetShape
NextTargatSubFileName
NextTargetSubShape

画像の形状を調べてプロパティに代入。
形状を絡めた2枚表示の進む、戻るの分岐が面倒だ。


TargetNo
TargetFileName
TargetShape
TargatSubFileName
TargetSubShape

TargetNoが基準となる。
1枚表示なら、
NextTargetNo = TargetNo+1 or TargetNo-1

で、その結果を

NextTargetNo
NextTargetFileName
NextTargetShape
NextTargatSubFileName
NextTargetSubShape

に設定する。簡単。

 

2枚表示の場合は、

TargetNo
TargetFileName
TargetShape
TargatSubFileName
TargetSubShape

TargetShapeか、TargetSubShapeが両方とも縦長の場合は
進む時、TargetNo+2で、NextTargetを設定する。
これも簡単。


戻る時は、TargetNo-2 では間違い。
形状が重要なのでインデックス1つずつ調べる。

NextTargetNo = TargetNo - 1
NextTargetFileName
NextTargetShape

調査後にNextTargetShapeが縦長なら

val no = NextTargetNo - 1
val path = ファイルリスト[no]
val shape = pathの画像が縦?横?

shapeが縦長なら

NextTargatSubFileName = NextTargetFileName
NextTargetSubShape = NextTargetShape
NextTargetFileName = path
NextTargetShape = path
NextTargetNo = no

shapeが横長なら

NextTargatSubFileName = ""
NextTargetSubShape = -1

で終わり。

 

次は、
TargetNo
TargetFileName
TargetShape
TargatSubFileName
TargetSubShape

TargetShapeか、TargetSubShapeのどちらかが横長の場合は
TargetFileNameの1枚だけを表示している。

TargatSubFileName = ""
TargetSubShape = -1
にしている。


この状況で次を準備するとき

進む時、TargetNo+1で、NextTargetを設定する。

NextTargetNo = TargetNo+1
NextTargetFileName
NextTargetShape

NextTargatSubFileName = ファイルリスト[NextTargetNo+1]
NextTargetSubShape

NextTargetSubShape、NextTargetShape どちらか横なら

NextTargatSubFileName = ""
NextTargetSubShape = -1


前に戻す時、

NextTargetNo = TargetNo - 1
NextTargetFileName = ファイルリスト[NextTargetNo]
NextTargetShape

NextTargetShapeが縦長なら

val no = NextTargetNo - 1
val path = ファイルリスト[no]
val shape = pathの画像が縦?横?

shapeが縦長なら

NextTargatSubFileName = NextTargetFileName
NextTargetSubShape = NextTargetShape
NextTargetFileName = path
NextTargetShape = path
NextTargetNo = no

shapeが横長なら

NextTargatSubFileName = ""
NextTargetSubShape = 横

 

NextTargat情報を元に画像をBitMapに構築する。
そして、情報を更新。

TargetNo = NextTargetNo
TargetFileName = NextTargetFileName
TargetShape = NextTargetShape
TargatSubFileName = NextTargatSubFileName
TargetSubShape = NextTargetSubShape

Targetは、現在スクリーンに表示されている情報。
NextTargatは、進む戻るで準備された次に表示させる情報。


Javaの時は配列のNoに意味付けして配列を渡してたけど、分かりづらかった。
クラスのプロパティにして準備と本配置で区別したので、日にちが経っても思い出しやすい。

 

テストでディレクトリ内の縦横混在画像を想定通りに表示させられたので、
サムネイル表示フラグメントをKotlinに書き直す。

 


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする