web-dev-qa-db-ja.com

Androidのコードのみでプログレスバーの色を変更する

ProgressBarクラスを使用したprogressBarがあります。

これをするだけです:

progressBar = new ProgressBar(this, null, Android.R.attr.progressBarStyleHorizontal);

入力値を次のように使用して、その色を変更する必要があります。

int color = "red in RGB value".progressBar.setColor(color)

またはそのようなもの...

XMLレイアウトは使用できません。プログレスバーはユーザー向けにカスタマイズできるためです。

50
hico

ここでトピックに関するヘルプを見つけたが、リンクを思い出せないので、私のニーズに最適な完全なソリューションを投稿しています:

    // Draw a simple progressBar from xml
    progressBar = new ProgressBar(this, null, Android.R.attr.progressBarStyleHorizontal);

    // Convert the color (Decimal value) to HEX value: (e.g: #4b96a0)
    String color = colorDecToHex(75, 150, 160);

    // Define a shape with rounded corners
    final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
    ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners,     null, null));

    // Sets the progressBar color
    pgDrawable.getPaint().setColor(Color.parseColor(color));

    // Adds the drawable to your progressBar
    ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
    progressBar.setProgressDrawable(progress);

    // Sets a background to have the 3D effect
    progressBar.setBackgroundDrawable(Utils.getActivity().getResources()
            .getDrawable(Android.R.drawable.progress_horizontal));

    // Adds your progressBar to your layout
    contentLayout.addView(progressBar);

そして、ここにDECIMALカラー値をHEXADECIMALに変換するコードがあります:

public static String colorDecToHex(int p_red, int p_green, int p_blue)
{
    String red = Integer.toHexString(p_red);
    String green = Integer.toHexString(p_green);
    String blue = Integer.toHexString(p_blue);

    if (red.length() == 1)
    {
        red = "0" + red;
    }
    if (green.length() == 1)
    {
        green = "0" + green;
    }
    if (blue.length() == 1)
    {
        blue = "0" + blue;
    }

    String colorHex = "#" + red + green + blue;
    return colorHex;
}

最後の方法はそれほどきれいではありませんが、うまく機能すると思います。

これがお役に立てば幸いです。このプログレスバーに多くの時間を浪費しています。

19
hico

これにより、それほど多くのコーディングを行う必要がなくなります:)

ProgressBar spinner = new Android.widget.ProgressBar(
            context,
            null,
            Android.R.attr.progressBarStyle);

spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000,Android.graphics.PorterDuff.Mode.MULTIPLY);
48
Mit Bhatt

背景とプログレスバーを異なる色で着色する必要がある場合。

progress_drawable.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="rectangle" >
            <solid Android:color="@color/white" />
        </shape>
    </item>
    <item Android:id="@Android:id/progress">
        <clip>
            <shape>
                <solid Android:color="@color/green" />
            </shape>
        </clip>
    </item>
</layer-list>

プログラムにより、レイヤーリスト項目を分解し、個別に色付けすることが可能です。

LayerDrawable progressBarDrawable = (LayerDrawable) progressBar.getProgressDrawable();
Drawable backgroundDrawable = progressBarDrawable.getDrawable(0);
Drawable progressDrawable = progressBarDrawable.getDrawable(1);

backgroundDrawable.setColorFilter(ContextCompat.getColor(this.getContext(), R.color.white), PorterDuff.Mode.SRC_IN);
progressDrawable.setColorFilter(ContextCompat.getColor(this.getContext(), R.color.red), PorterDuff.Mode.SRC_IN);
32
brbsBruno

更新

Android(21作品))の新しいバージョンでは、setProgressTintListを使用するだけでプログレスバーの色をプログラムで変更できます。

赤に設定するには、次を使用します。

//bar is a ProgressBar
bar.setProgressTintList(ColorStateList.valueOf(Color.RED));
18
Jose M Vidal

プログレスバーにカラーフィルターを設定することで、プログレスバーを色付けすることができます:

Drawable drawable = progressBar.getProgressDrawable();
drawable.setColorFilter(new LightingColorFilter(0xFF000000, customColorInt));
13
Moritz

これは、AppCompatで動作します:DrawableCompat.setTint(progressBar.getProgressDrawable()、tintColor);

7
Lubos Ilcik

プログラムでプログレスバーの色を変更したい場合は、このコードを過ぎてコピーすると100%動作しています

 mainProgressBar.getIndeterminateDrawable().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);   
5
Pir Fahim Shah

progressbar.setIndeterminateTintList(ColorStateList.valueOf(Color.RED));

API 21以上でのみ動作します

4
Daniel Park

デフォルト色 in xml by drawableを指定しました。

プログラムで変更しました。

activity_splasg.xml

<ProgressBar
       Android:id="@+id/splashProgressBar"
       Android:progressDrawable="@drawable/splash_progress_drawable"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:max="100"
       Android:progress="50"
       style="?android:attr/progressBarStyleHorizontal"
       Android:layout_alignParentBottom="true" />

splash_progress_drawable.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>
            <solid
                Android:color="@Android:color/transparent" />
        </shape>
    </item>

    <item
        Android:id="@Android:id/progress">
        <clip>
            <shape>
                <solid
                    Android:color="#e5c771" />
            </shape>
        </clip>
    </item>

</layer-list>

変更方法プログラムでプログレッシブ描画可能色

ProgressBar splashProgressBar = (ProgressBar)findViewById(R.id.splashProgressBar);

Drawable bgDrawable = splashProgressBar.getProgressDrawable();
bgDrawable.setColorFilter(Color.BLUE, Android.graphics.PorterDuff.Mode.MULTIPLY);
splashProgressBar.setProgressDrawable(bgDrawable);

これがお役に立てば幸いです。

3
Hiren Patel

この投稿はあなたが探しているものです: Androidでプログレスバーのプログレスカラーを変更する方法

ユーザーが独自の色を選択できるようにするには、各色に対して複数の描画可能なXMLファイルを作成し、ユーザーの選択に基づいてそれらを選択します。

1
Cruceo

レイアウト= activity_main.xml:

<ProgressBar
    Android:id="@+id/circle_progress_bar_middle"
    style="?android:attr/progressBarStyleHorizontal"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_centerInParent="true"
    Android:max="100"
    Android:rotation="-90"
    Android:indeterminate="false"
    Android:progressDrawable="@drawable/my_drawable_settings2" />

In Java Activity/Fragment:

ProgressBar myProgressBar = (ProgressBar) view.findViewById(R.id.circle_progress_bar_middle);
myProgressBar.setProgressDrawable(getResources().getDrawable(R.my_drawable_settings1));

Drawable/mipmapフォルダー内のmy_drawable_settings1.xmlファイル:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:id="@Android:id/progress">
        <shape
            Android:innerRadius="55dp"
            Android:shape="ring"
            Android:thickness="9dp"
            Android:useLevel="true">

            <gradient
                Android:startColor="#3594d1"
                Android:endColor="@color/white"
                Android:type="sweep" />
        </shape>
    </item>
</layer-list>

My_drawable_settings1とmy_drawable_settings2.xmlの色は異なります。

1
Gene