赞
踩
众所周知,SeekBar作为安卓的常用控件之一,用来进行显示进度,但是SeekBar本身两边会留出空隙,不管怎么设置,进度条本身都不会与父布局贴近,但是需求又偏偏要贴近贴近而且刻度图标又不能少呢?不妨用ProgressBar来做吧,记下来备用~~
public class MatchSeekBar extends ProgressBar{
protected Paint mPaint;
protected int mRealWidth;
private int w;
public MatchSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint=new Paint();
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setAntiAlias(true); //设置画笔为无锯齿
int oldRadius=getHeight()/2;
int radius=(int)(oldRadius-1.5);
w=mRealWidth-oldRadius*2;
float radio = getProgress() * 1.0f / getMax();
float progressPosX = (int) (w * radio);
canvas.translate(getPaddingLeft()+oldRadius, getHeight() / 2);
/**
* 先画一个白色的圆
*/
Paint mPaint2=new Paint();
mPaint2.setColor(Color.WHITE);
canvas.drawCircle(progressPosX,0,radius,mPaint2);
/**
* 再画一个圆环
* 这里要注意的是圆与圆环的半径都被减去1.5,这是为啥呢,
* 因为这里半径用到控件高度的一半,而圆环的的宽度是3,
* 那么圆环就会有1.5被画到控件外面去
*
*/
mPaint.setColor(Color.parseColor("#18BBB6")); //设置画笔颜色
mPaint.setStrokeWidth((float) 3.0); //线宽
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(progressPosX,0,(int)radius,mPaint);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
mRealWidth = w - getPaddingRight() - getPaddingLeft();
Log.d("dake.xuan", "onSizeChanged: "+mRealWidth);
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。