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

android OS & iPadOS の記録。

基礎。seekbar プログレスバーの色を変更。lollipop 以降で利用可能?

2021-11-08 23:30:08 | Android studio 日記

recyclerView で、サムネイル画像を横に並べて表示。その下にseekbar を配置して、recyclerView と同期させる。
サムネイル画像を右から並べるか、左から並べるか、recyclerView はリバースメソッドで切り替えができるが、seekbar はメソッドで用意されていない。
プログレスバーの伸び方は数値変換で対応できる。
プログレスバーの伸び方の見た目は、プログレスバーとプログレスバックグランドの色を入れ替えれば、リバースしたことになる。

用意されている変更のメソッドは、APIレベルの高いもの用でlollipop対象だとエラーとなる。
(用意されてる色変更メソッドで対象OSに使えるなら、それを使う。)
トライエンドエラーで動きそうな方法を残す。

方法は、メインアクティビティーでdrawableに作ったレイアウトファイルを指定するだけ。

 

【MainActivity.java】


    Drawable drawable = ResourcesCompat.getDrawable( getResources(), R.drawable.seekbar_progress_left_start, null );
    SeekBar seekBar = (SeekBar)findViewById( R.id.seekbar );
    seekBar.setProgressDrawable( drawable );

    

ここでは、
    seekbar_progress_right_start.xml
    seekbar_progress_left_start.xml
を切り替え設定して見かけ上でプログレスバーの伸び方を反転している。

見かけが反転し、右から左へ延びるとき、
    progress = MaxNo - progress;
    seekBar.setProgress( progress );

これで補正する。

 

【activity_main.xml】

< ?xml version="1.0" encoding="utf-8"?>
< androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

 

    < SeekBar
         android:id="@+id/seekbar"
         android:layout_width="0dp"
         android:layout_height="30dp"

         android:progressDrawable="@drawable/seekbar_progress_right_start"

         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent" />


</ androidx.constraintlayout.widget.ConstraintLayout>

 

 

drawableに色を入れ替えた xml ファイルを2つ用意する。
色設定をファイル別に入れ替えているだけ。
    「android:color="@color/teal_200"」「android:color="#aaaaaa" 」
など。

 

【seekbar_progress_right_start.xml】

< ?xml version="1.0" encoding="utf-8"?>
< layer-list xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

    < item android:id="@android:id/background">
        < shape android:shape="line" >
            < stroke
                android:width="4dp"
                android:color="@color/teal_200"/>
        </ shape>
    </ item>


    < item android:id="@android:id/progress" >
        < clip>
            < shape android:shape="line" >
                < stroke android:width="4dp"
                    android:color="#aaaaaa" />
            </ shape>
        </ clip>
    </ item>
</ layer-list>

 

【seekbar_progress_left_start.xml】

< ?xml version="1.0" encoding="utf-8"?>
< layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    < item android:id="@android:id/background">
        < shape android:shape="line" >
            < stroke
                android:width="4dp"
                android:color="#aaaaaa"/>
        </ shape>
    </ item>


    < item android:id="@android:id/progress" >
        < clip>
            < shape android:shape="line" >
                < stroke android:width="4dp"
                    android:color="@color/teal_200" />
            </ shape>
        </ clip>
    </ item>
</ layer-list>

 

疲れる。散々悩み、やれることをやって最後に報われたからいいけど、心折れる寸前だったわ。

とりあえず、エミュレーター上で動いているので大丈夫かな。
lollipopデバイスに途中状態でインストールテストをしてみよう。

 

 


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