252

下の画像のようなシーク バーのスタイルを設定したかったのです。

ここに画像の説明を入力

デフォルトのシークバーを使用すると、次のようになります。

ここに画像の説明を入力

だから私が必要とするのは、色を変えることだけです。余分なスタイルは必要ありません。これを行う簡単な方法はありますか、それともカスタム ドローアブルを作成する必要がありますか?

カスタムのものを作成しようとしましたが、上記のように正確なものを取得できませんでした。カスタム ドローアブルを使用した後、次のようになります。

ここに画像の説明を入力

カスタムのものを作成する必要がある場合は、進行状況線の幅と形状を減らす方法を提案してください.

私のカスタム実装:

background_fill.xml:

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

    <gradient
        android:angle="90"
        android:centerColor="#FF555555"
        android:endColor="#FF555555"
        android:startColor="#FF555555" />

    <corners android:radius="1dp" />

    <stroke
        android:width="1dp"
        android:color="#50999999" />
    <stroke
        android:width="1dp"
        android:color="#70555555" />

</shape>

progress_fill.xml

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

    <gradient
        android:angle="90"
        android:centerColor="#FFB80000"
        android:endColor="#FFFF4400"
        android:startColor="#FF470000" />

    <corners android:radius="1dp" />

    <stroke
        android:width="1dp"
        android:color="#50999999" />
    <stroke
        android:width="1dp"
        android:color="#70555555" />

</shape>

進行状況.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"
        android:drawable="@drawable/background_fill"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/progress_fill" />
    </item>

</layer-list>

親指.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <gradient
        android:angle="270"
        android:endColor="#E5492A"
        android:startColor="#E5492A" />

    <size
        android:height="20dp"
        android:width="20dp" />

</shape>

シークバー:

<SeekBar
        android:id="@+id/seekBarDistance"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="88dp"
        android:progressDrawable="@drawable/progress"
        android:thumb="@drawable/thumb" >
    </SeekBar>
4

25 に答える 25

309

Android ソース コードからドローアブルと xml を抽出し、その色を赤に変更します。これは、mdpi ドローアブルに対してこれをどのように完了したかの例です。

カスタムred_scrubber_control.xml(res/drawable に追加):

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/red_scrubber_control_disabled_holo" android:state_enabled="false"/>
    <item android:drawable="@drawable/red_scrubber_control_pressed_holo" android:state_pressed="true"/>
    <item android:drawable="@drawable/red_scrubber_control_focused_holo" android:state_selected="true"/>
    <item android:drawable="@drawable/red_scrubber_control_normal_holo"/>
</selector>

カスタム:red_scrubber_progress.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/red_scrubber_track_holo_light"/>
    <item android:id="@android:id/secondaryProgress">
        <scale
            android:drawable="@drawable/red_scrubber_secondary_holo"
            android:scaleWidth="100%" />
    </item>
    <item android:id="@android:id/progress">
        <scale
            android:drawable="@drawable/red_scrubber_primary_holo"
            android:scaleWidth="100%" />
    </item>

</layer-list>

次に、このリンクから取得したAndroidソースコードから必要なドローアブルをコピーします

これらのドローアブルを hdpi、mdpi、xhdpi ごとにコピーするとよいでしょう。たとえば、私は mdpi のみを使用します。

次に、Photoshop を使用して色を青から赤に変更します。

red_scrubber_control_disabled_holo.png: red_scrubber_control_disabled_holo

red_scrubber_control_focused_holo.png: red_scrubber_control_focused_holo

red_scrubber_control_normal_holo.png: red_scrubber_control_normal_holo

red_scrubber_control_pressed_holo.png: red_scrubber_control_pressed_holo

red_scrubber_primary_holo.9.png: red_scrubber_primary_holo.9

red_scrubber_secondary_holo.9.png: red_scrubber_secondary_holo.9

red_scrubber_track_holo_light.9.png: red_scrubber_track_holo_light.9

SeekBar をレイアウトに追加します。

<SeekBar
    android:id="@+id/seekBar1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:progressDrawable="@drawable/red_scrubber_progress"
    android:thumb="@drawable/red_scrubber_control" />

結果:

ここに画像の説明を入力

于 2013-04-23T09:15:51.897 に答える
74

私の答えは Andras Balázs Lajtha の答えから着想を得たもので、xml ファイルなしで機能します。

seekBar.getProgressDrawable().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
seekBar.getThumb().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
于 2015-12-09T17:55:58.427 に答える
61

まったく同じバーを赤色にしたい場合は、PorterDuff カラー フィルターをプログラムで追加できます。ProgressBar基本クラスのメソッドを使用して、色付けする各ドローアブルを取得できます。次に、カラーフィルターを設定します。

mySeekBar.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(srcColor, PorterDuff.Mode.MULTIPLY));

Porter Duff フィルターで必要な色調整を行うことができない場合は、独自のカラー フィルターを指定できます。

于 2013-08-24T05:26:44.563 に答える
46

Google は SDK 21 でこれを簡単にしました。現在、親指の色合いを指定するための属性があります。

android:thumbTint
android:thumbTintMode
android:progressTint

http://developer.android.com/reference/android/widget/AbsSeekBar.html#attr_android:thumbTint http://developer.android.com/reference/android/widget/AbsSeekBar.html#attr_android:thumbTintMode

于 2014-12-02T20:54:38.923 に答える
43

色属性をあなたの色に置き換えるだけです

background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">

    <stroke android:width="1dp" android:color="#D9D9D9"/>
    <corners android:radius="1dp" />

</shape>

進行状況.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="line">

    <stroke android:width="1dp" android:color="#2EA5DE"/>
    <corners android:radius="1dp" />

</shape>

style.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/seekbar_background"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/seekbar_progress" />
    </item>

</layer-list>

親指.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <size android:height="30dp" android:width="30dp"/>
    <stroke android:width="18dp" android:color="#882EA5DE"/>
    <solid android:color="#2EA5DE" />
    <corners android:radius="1dp" />

</shape>
于 2014-11-20T09:01:10.970 に答える
13

設定するだけ

android:maxHeight="3dp"
android:minHeight="3dp"

それで全部です

于 2013-09-05T09:37:39.873 に答える
12

上記の 1 つ (@andrew) で述べたように、このサイトでカスタム SeekBar を作成するのは非常に簡単です - http://android-holo-colors.com/

そこで SeekBar を有効にし、色を選択し、すべてのリソースを受け取ってプロジェクトにコピーするだけです。次に、それらを xml に適用します。次に例を示します。

  android:thumb="@drawable/apptheme_scrubber_control_selector_holo_light"
  android:progressDrawable="@drawable/apptheme_scrubber_progress_horizontal_holo_light"
于 2015-04-25T01:43:29.883 に答える
2

私はbackground_fill.xml

<?xml version="1.0" encoding="UTF-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<size android:height="1dp" />
<gradient
    android:angle="0"
    android:centerColor="#616161"
    android:endColor="#616161"
    android:startColor="#616161" />
<corners android:radius="0dp" />
<stroke
    android:width="1dp"
    android:color="#616161" />
<stroke
    android:width="1dp"
    android:color="#616161" />
</shape>

そしてそのprogress_fill.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<size android:height="1dp" />
<gradient
    android:angle="0"
    android:centerColor="#fafafa"
    android:endColor="#fafafa"
    android:startColor="#fafafa" />
<corners android:radius="1dp" />
<stroke
    android:width="1dp"
    android:color="#cccccc" />
<stroke
    android:width="1dp"
    android:color="#cccccc" />
 </shape>

背景と進行状況の1dp高さを作成します。

于 2015-02-25T00:17:36.333 に答える
1

Android リソースを見ると、シーク バーは実際に画像を使用しています。

たとえば 10px で上下が透明なドローアブルを作成する必要があり、中央の 5px の線が表示されます。

添付画像参照。これを NinePatch に変換する必要があります。

ここに画像の説明を入力

于 2013-04-23T08:17:02.823 に答える
-1

このようにすることもできます:

<SeekBar
    android:id="@+id/redSeekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:progressDrawable="@color/red"
    android:maxHeight="3dip"/>

それが役立つことを願っています!

于 2015-12-06T16:23:20.323 に答える