到目前为止,我已经创建了一个扩展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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)