2022年3月17日木曜日

【Android USB oscilloscope】(18) 縦型SeekBarを動的に切り替える

余っているAndroidスマホをオシロにしよう!

UIしてます.なかなかうまくいきません.

前回触れた縦型SeekBarを貼り付けて動かすのはなんとかできてます.しかし重箱の隅で手こずってます.

比較的細かい部分まで書かれているこの本を買って新幹線の車中で読んだけど、重箱の隅までは書かれておらず、重箱の隅は結局netの情報から採取するしかないというのが現実です.
以下では本に書かれていない重箱の隅をほじくっていきたいと思います.

やりたいUIは、4ch画面で各ch波形を上下に移動させる操作です.移動には縦型SeekBarを使います.
しかしながら、4つのSeekBarを画面に置くと邪魔ですから、右下のボタンでSeekBarのchを1→2→3→4→OFFとサイクリックに切り替えるようにしたいです.
  左図: ch1を上下移動させているところ
  右図: ch2を上下移動させているところ
ch3とch4は以下同文です.
言うは易しでありましてボタンが押された時の操作がいろいろとあります.
 ①SeekBarの上下移動値を復旧する
 ②SeekBarの色を変える
 ③使わないときはSeekBarを消す
 ④ボタンの色を変える

やり方を説明します.

①SeekBarの上下移動値を復旧する

地雷があります.てか絶望的に無理でした.

SeekBarの初期設定はこんな風にします.seek範囲を-100~100にして初期値を0にセットしたりとかです.
  binding.IDseekBar1.max = 100
  binding.IDseekBar1.min = -100
  binding.IDseekBar1.progress = 0
なんちゃってこれはウソでありまして、悲しいことにminが使えません.古いandroid4とかであればminも使えたらしいのですが、現在ではminはエラーになります.なのでseek範囲は0~xで使わなければなりません.いまいちだけど回避可能です.

しかしガチの地雷はこの先に待っていました.
progressを設定できるのは最初の1度きりです.2度目のprogress設定は無視されて0になってしまいます.海外の教えてサイトにあった「これはバグである」という説を信じます.

以上から、1つのSeekBarをch1234に使いまわすのは諦めます.
代案として、4つのSeekBarを画面上に置いて、どれか1つだけ表示する、3つは消す.

②SeekBarの色を変える
4つのSeekBarそれぞれに色を設定します.
動的には変えないのでactivity_main.xmlで設定して後は触りません.例えばFF0000はRGBの赤です.
    <to.msn.wings.canvasbasic.VerticalSeekBar
        android:id="@+id/IDseekBar3"
            中略
        android:progressBackgroundTint="#FFFF0000"
        android:progressTint="#FFFF0000"
        android:thumbTint="#FFFF0000" />

③使わないときはSeekBarを消す
ボタンクリックcallback内で処理します.
SeekBarの表示/非表示はvisibilityでやります.
IDseekBar1,2,3,4はch1~ch4のSeekBar objectsです.ここではch1を表示してch234を消してます.

binding.IDbtnOfs.setOnClickListener{
    val ch = binding.sv.commonparam.getch()
    when(ch) {
        0 -> {   略    }
        1 -> {
            binding.IDseekBar1.visibility = VISIBLE    ③表示
            binding.IDseekBar2.visibility = GONE       ③消す
            binding.IDseekBar3.visibility = GONE       ③消す
            binding.IDseekBar4.visibility = GONE       ③消す
            binding.IDbtnOfs.setBackgroundColor(Color.YELLOW)   ④ボタンの色
            binding.IDbtnOfs.setTextColor(Color.BLACK)     ④ボタンの文字色
        }
        2 -> {       }
        3 -> {       }
        4 -> {   略    }
    }
}

④ボタンの色を変える
ボタン色変更はsetBackgroundColor()を使うのですが、引数が厄介です.
 ・"0xFF00FF"のような形式のRGB指定は使えない
 ・R.color.redのようなresourceを指定するのもダメ
 ・Color.YELLOWのようにColorオブジェクトを使うならOK
 ・Color.rgb(255,0,255)のように指定するのでもOK
色指定を一元化できなくてなんだかなー.

ボタン文字色変更はsetTextColor()です.引数は同上.


かしこ

8 件のコメント:

  1. >UIしてます.なかなかうまくいきません.
    脳内で、
    「友愛してます。なかなかうまくいきません。」
    に、変換されました。だいぶ焼きが廻ってきたようです。

    返信削除
    返信
    1. おはよーございます

      あははー、鬱系ネット漫画の始まりのコマのような.
      本日で最もウケたと思われます.

      削除
  2. 相変わらず宇宙語はチンプンカンプンです^^;)。

    そろそろ春アニメの情報も出揃ってきましたね。おすすめ作品はありますか?。
    自分は、「SPYファミリー」と「くノ一ツバキの胸の内」&「それでも歩みは寄せてくる」(ともに「高木さん…」同作者)が楽しみです!。

    返信削除
    返信
    1. まだあまりチェックしてないのですが、今期よりは楽しめそうかなとは思っとるところです.
      「かぐや」様まだやるの?
      「カッコウの許嫁」が楽しいと嬉しい.
      「式守さん」に期待.
      「古見さん」
      「サマータイムレンダ」渡辺歩+瀬古浩司
      「処刑少女の生きる道」
      「SPY×FAMILY」
      「BIRDIE WING -Golf Girls’ Story-」黒田洋介!

      今期アニメはかなり切り気味で、残っているのは
      進撃、平家、終末、失格紋、賢者、クロイツ、リアデイル、ドールズフロント、ハコヅメ、着せ替え人形
      となりました.
      結構まだ見ているともいえます.

      削除
    2. 「古見さん」
      「処刑少女の生きる道」
      「SPY×FAMILY」
      あと
      「阿波連さんははかれない」
      は原作読んでます(読んでました)。

      「サマータイムレンダ」
      サスペンス+ホラー+SF…?
      概要見てこれメッチャ期待してるんですが、面白いのでしょうか^^;)。

      削除
    3. 阿波連さん少し気になるです.

      渡辺歩は古見さんの監督+瀬古浩司は進撃の脚本なので、サマータイムレンダは外さない可能性大.

      削除
    4. >マータイムレンダ…
      無料で読めるところまで原作読んで見ましたが…、これ面白いんでまいかと^^)。
      原作はもう完結していて、アニメも2クールで最後までやるとか。かなり楽しみですま。

      削除
    5. そうかそうか、期待しとくであります

      削除