最近項目需要用到一個很簡潔的進(jìn)度條,所以自定義一個
需要做的事情:
1.繼承View
2.重寫onDraw(Canvas c)方法
3.更新View
4.使用
開始
1.繼承自View或VIew的子類
public class SlenderProgressBar extends View{
}
需要在構(gòu)造器調(diào)用父類構(gòu)造方法super(Context context, @Nullable AttributeSet attrs)
或者super(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
不能只調(diào)用super(Context context)
原因未知
public SlenderProgressBar(Context context) {
this(context,null);
}
public SlenderProgressBar(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public SlenderProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
2.重寫onDraw(Canvas canvas)方法璧亚,畫你想畫的東西
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
//畫矩形
//getMeasuredWidth()獲取View寬度
//mProgress進(jìn)度黍聂,length矩形長度
float length =(mProgress/100)*getMeasuredWidth();
//定義一個矩形
RectF rectF=new RectF(0,0,length,getMeasuredHeight());
//畫
canvas.drawRect(rectF,p);
}
3.更新view
調(diào)用invalidate()方法末誓,在自定義控件內(nèi)定義方法
public void drawRect(float ratio){
mProgress=ratio;
//每次更新進(jìn)度后,也同時更新view
invalidate();
}
4.使用
自定義控件使用時需要聲明完整的包名路徑
在xml中:
<com.example.ygl.viewtest.SlenderProgressBar
android:layout_gravity="center"
android:id="@+id/spb"
android:layout_width="match_parent"
android:layout_height="4dp"
android:background="@color/colorAccent"/>
完整代碼見:
https://github.com/YGLLL/CustemViewTest/tree/step1
下一次將為進(jìn)度條加入動畫特效
作者:YGL_9b35
鏈接:http://www.reibang.com/p/878cd7982038
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)蝗碎,非商業(yè)轉(zhuǎn)載請注明出處。