android – 自定义ProgressBar

android – 自定义ProgressBar,第1张

概述我正在尝试创建一个如下所示的ProgresBar: 到目前为止,我已经创建了一个扩展ProgressBar的对象,现在我想弄清楚我的下一步是什么. 我知道我需要使用一些逻辑来覆盖onDraw(),这些逻辑将决定要着色的方块数.这是微不足道的. 我不知道该怎么做就是首先得到这些方块.如何替换默认的drawable,所以当我在布局中添加自定义栏时,我可以看到像我的图像? 试试这个自定义Drawable 我正在尝试创建一个如下所示的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所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1129991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存