ProgressBarクラスを使用したprogressBarがあります。
これをするだけです:
progressBar = new ProgressBar(this, null, Android.R.attr.progressBarStyleHorizontal);
入力値を次のように使用して、その色を変更する必要があります。
int color = "red in RGB value".progressBar.setColor(color)
またはそのようなもの...
XMLレイアウトは使用できません。プログレスバーはユーザー向けにカスタマイズできるためです。
ここでトピックに関するヘルプを見つけたが、リンクを思い出せないので、私のニーズに最適な完全なソリューションを投稿しています:
// 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;
}
最後の方法はそれほどきれいではありませんが、うまく機能すると思います。
これがお役に立てば幸いです。このプログレスバーに多くの時間を浪費しています。
これにより、それほど多くのコーディングを行う必要がなくなります:)
ProgressBar spinner = new Android.widget.ProgressBar(
context,
null,
Android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000,Android.graphics.PorterDuff.Mode.MULTIPLY);
背景とプログレスバーを異なる色で着色する必要がある場合。
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);
更新
Android(21作品))の新しいバージョンでは、setProgressTintList
を使用するだけでプログレスバーの色をプログラムで変更できます。
赤に設定するには、次を使用します。
//bar is a ProgressBar
bar.setProgressTintList(ColorStateList.valueOf(Color.RED));
プログレスバーにカラーフィルターを設定することで、プログレスバーを色付けすることができます:
Drawable drawable = progressBar.getProgressDrawable();
drawable.setColorFilter(new LightingColorFilter(0xFF000000, customColorInt));
これは、AppCompatで動作します:DrawableCompat.setTint(progressBar.getProgressDrawable()、tintColor);
プログラムでプログレスバーの色を変更したい場合は、このコードを過ぎてコピーすると100%動作しています
mainProgressBar.getIndeterminateDrawable().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);
progressbar.setIndeterminateTintList(ColorStateList.valueOf(Color.RED));
API 21以上でのみ動作します
デフォルト色 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);
これがお役に立てば幸いです。
この投稿はあなたが探しているものです: Androidでプログレスバーのプログレスカラーを変更する方法
ユーザーが独自の色を選択できるようにするには、各色に対して複数の描画可能なXMLファイルを作成し、ユーザーの選択に基づいてそれらを選択します。
レイアウト= 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の色は異なります。