我想为Android应用程序创建自定义进度条。 我想得到类似的东西:
我创建了以下代码来创建双色进度条:
<?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>
<gradient
android:startColor="#385B68"
android:centerColor="#385B68"
android:centerY="1.0"
android:endColor="#385B68"
android:angle="270" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<gradient
android:startColor="#65B4D4"
android:centerColor="#65B4D4"
android:centerY="1.0"
android:endColor="#65B4D4"
android:angle="270" />
</shape>
</clip>
</item>
</layer-list>
但我想知道如何每10%甚至每20%添加分离器。有没有特殊的方法来实现这一目标?
感谢您的宝贵帮助。
答案 0 :(得分:0)
为了创建这样的自定义进度条。创建一个新类:
import java.util.ArrayList;
import java.util.List;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
public class ProgressBarDrawable extends Drawable
{
private int parts = 10;
private Paint paint = null;
private int fillColor = Color.parseColor("#2D6EB9");
private int emptyColor = Color.parseColor("#233952");
private int separatorColor = Color.parseColor("#FFFFFF");
private RectF rectFill = null;
private RectF rectEmpty = null;
private List<RectF> separators = null;
public ProgressBarDrawable(int parts)
{
this.parts = parts;
this.paint = new Paint(Paint.ANTI_ALIAS_FLAG);
this.separators = new ArrayList<RectF>();
}
@Override
protected boolean onLevelChange(int level)
{
invalidateSelf();
return true;
}
@Override
public void draw(Canvas canvas)
{
// Calculate values
Rect b = getBounds();
float width = b.width();
float height = b.height();
int spaceFilled = (int)(getLevel() * width / 10000);
this.rectFill = new RectF(0, 0, spaceFilled, height);
this.rectEmpty = new RectF(spaceFilled, 0, width, height);
int spaceBetween = (int)(width / 100);
int widthPart = (int)(width / this.parts - (int)(0.9 * spaceBetween));
int startX = widthPart;
for (int i=0; i<this.parts - 1; i++)
{
this.separators.add( new RectF(startX, 0, startX + spaceBetween, height) );
startX += spaceBetween + widthPart;
}
// Foreground
this.paint.setColor(this.fillColor);
canvas.drawRect(this.rectFill, this.paint);
// Background
this.paint.setColor(this.emptyColor);
canvas.drawRect(this.rectEmpty, this.paint);
// Separator
this.paint.setColor(this.separatorColor);
for (RectF separator : this.separators)
{
canvas.drawRect(separator, this.paint);
}
}
@Override
public void setAlpha(int alpha)
{
}
@Override
public void setColorFilter(ColorFilter cf)
{
}
@Override
public int getOpacity()
{
return PixelFormat.TRANSLUCENT;
}
}
然后,在您要应用自定义主题的位置,请使用以下代码:(10是部件数量)。
ProgressBarDrawable bgProgress= new ProgressBarDrawable(10);
progressbar.setProgressDrawable(bgProgress);