gpt4 book ai didi

android - 自定义进度条

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:34 26 4
gpt4 key购买 nike

我正在尝试创建一个如下所示的 ProgresBar:

Desired ProgressBar

到目前为止,我已经创建了一个扩展 ProgressBar 的对象,现在我想弄清楚我的下一步是什么。

我知道我需要用一些逻辑来覆盖 onDraw(),这些逻辑将决定要为多少个方 block 上色。这很简单。

我不知道如何做的是首先得到这些方 block 。如何替换默认的可绘制对象,以便在布局中添加自定义栏时可以看到类似我的图像的内容?

最佳答案

试试这个自定义 Drawable:

class ProgressDrawable extends Drawable {
private static final int NUM_RECTS = 10;
Paint mPaint = new Paint();

@Override
protected boolean onLevelChange(int level) {
invalidateSelf();
return true;
}

@Override
public void draw(Canvas canvas) {
int level = getLevel();
Rect b = getBounds();
float width = b.width();
for (int i = 0; i < NUM_RECTS; i++) {
float left = width * i / NUM_RECTS;
float right = left + 0.9f * width / NUM_RECTS;
mPaint.setColor((i + 1) * 10000 / NUM_RECTS <= level? 0xff888888 : 0xffbbbbbb);
canvas.drawRect(left, b.top, right, b.bottom, mPaint);
}
}

@Override
public void setAlpha(int alpha) {
}

@Override
public void setColorFilter(ColorFilter cf) {
}

@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}

并在 onCreate 中使用以下代码对其进行测试:

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

final ProgressBar pb = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
Drawable d = new ProgressDrawable();
pb.setProgressDrawable(d);
pb.setPadding(20, 20, 20, 0);
ll.addView(pb);

OnSeekBarChangeListener l = new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int newProgress = pb.getMax() * progress / seekBar.getMax();
Log.d(TAG, "onProgressChanged " + newProgress);
pb.setProgress(newProgress);
}
};

int[] maxs = {4, 10, 60, 110};
for (int i = 0; i < maxs.length; i++) {
SeekBar sb = new SeekBar(this);
sb.setMax(maxs[i]);
sb.setOnSeekBarChangeListener(l);
sb.setPadding(20, 20, 20, 0);
ll.addView(sb);
}

setContentView(ll);

关于android - 自定义进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com