Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 自定义ProgressBar大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个如下所示的ProgresBar:

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

我知道我需要使用一些逻辑来覆盖onDraw(),这些逻辑将决定要着色的方块数.这是微不足道的.

我不知道该怎么做就是首先得到这些方块.如何替换认的drawable,所以当我在布局中添加自定义栏时,我可以看到像我的图像?

解决方法

试试这个自定义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,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,0);
    ll.addView(sb);
}

setContentView(ll);

大佬总结

以上是大佬教程为你收集整理的android – 自定义ProgressBar全部内容,希望文章能够帮你解决android – 自定义ProgressBar所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。