android material design 进度条,material design - How to change progress bar's progress color in Android...

本文详细介绍了如何为Android ProgressBar 设计个性化的水平渐变背景和前景,包括使用GradientDrawable、ClipDrawable和LayerDrawable创建不同颜色区域,以及如何根据需求设置Solid颜色或渐变方向。实例展示了如何设置背景、次要进度和普通进度的颜色及对应值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

For a horizontal style ProgressBar I use:

import android.widget.ProgressBar;

import android.graphics.drawable.GradientDrawable;

import android.graphics.drawable.ClipDrawable;

import android.view.Gravity;

import android.graphics.drawable.Drawable;

import android.graphics.drawable.LayerDrawable;

public void setColours(ProgressBar progressBar,

int bgCol1, int bgCol2,

int fg1Col1, int fg1Col2, int value1,

int fg2Col1, int fg2Col2, int value2)

{

//If solid colours are required for an element, then set

//that elements Col1 param s the same as its Col2 param

//(eg fg1Col1 == fg1Col2).

//fgGradDirection and/or bgGradDirection could be parameters

//if you require other gradient directions eg LEFT_RIGHT.

GradientDrawable.Orientation fgGradDirection

= GradientDrawable.Orientation.TOP_BOTTOM;

GradientDrawable.Orientation bgGradDirection

= GradientDrawable.Orientation.TOP_BOTTOM;

//Background

GradientDrawable bgGradDrawable = new GradientDrawable(

bgGradDirection, new int[]{bgCol1, bgCol2});

bgGradDrawable.setShape(GradientDrawable.RECTANGLE);

bgGradDrawable.setCornerRadius(5);

ClipDrawable bgclip = new ClipDrawable(

bgGradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);

bgclip.setLevel(10000);

//SecondaryProgress

GradientDrawable fg2GradDrawable = new GradientDrawable(

fgGradDirection, new int[]{fg2Col1, fg2Col2});

fg2GradDrawable.setShape(GradientDrawable.RECTANGLE);

fg2GradDrawable.setCornerRadius(5);

ClipDrawable fg2clip = new ClipDrawable(

fg2GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);

//Progress

GradientDrawable fg1GradDrawable = new GradientDrawable(

fgGradDirection, new int[]{fg1Col1, fg1Col2});

fg1GradDrawable.setShape(GradientDrawable.RECTANGLE);

fg1GradDrawable.setCornerRadius(5);

ClipDrawable fg1clip = new ClipDrawable(

fg1GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);

//Setup LayerDrawable and assign to progressBar

Drawable[] progressDrawables = {bgclip, fg2clip, fg1clip};

LayerDrawable progressLayerDrawable = new LayerDrawable(progressDrawables);

progressLayerDrawable.setId(0, android.R.id.background);

progressLayerDrawable.setId(1, android.R.id.secondaryProgress);

progressLayerDrawable.setId(2, android.R.id.progress);

//Copy the existing ProgressDrawable bounds to the new one.

Rect bounds = progressBar.getProgressDrawable().getBounds();

progressBar.setProgressDrawable(progressLayerDrawable);

progressBar.getProgressDrawable().setBounds(bounds);

// setProgress() ignores a change to the same value, so:

if (value1 == 0)

progressBar.setProgress(1);

else

progressBar.setProgress(0);

progressBar.setProgress(value1);

// setSecondaryProgress() ignores a change to the same value, so:

if (value2 == 0)

progressBar.setSecondaryProgress(1);

else

progressBar.setSecondaryProgress(0);

progressBar.setSecondaryProgress(value2);

//now force a redraw

progressBar.invalidate();

}

An example call would be:

setColours(myProgressBar,

0xff303030, //bgCol1 grey

0xff909090, //bgCol2 lighter grey

0xff0000FF, //fg1Col1 blue

0xffFFFFFF, //fg1Col2 white

50, //value1

0xffFF0000, //fg2Col1 red

0xffFFFFFF, //fg2Col2 white

75); //value2

If you don't need the 'secondary progress' simply set value2 to value1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值