最简单的Android自定义View

2022-12-12  本文已影响0人  蹦蹦跳跳猪猪侠

最近项目需要用到一个很简洁的进度条,所以自定义一个

需要做的事情:

1.继承View

2.重写onDraw(Canvas c)方法

3.更新View

4.使用

开始

1.继承自View或VIew的子类

public class SlenderProgressBar extends View{

}

需要在构造器调用父类构造方法super(Context context, @Nullable AttributeSet attrs)

或者super(Context context, @Nullable AttributeSet attrs, int defStyleAttr)

不能只调用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进度,length矩形长度

    float length =(mProgress/100)*getMeasuredWidth();

    //定义一个矩形

    RectF rectF=new RectF(0,0,length,getMeasuredHeight());

    //画

    canvas.drawRect(rectF,p);

}

3.更新view

调用invalidate()方法,在自定义控件内定义方法

public void drawRect(float ratio){

mProgress=ratio;

//每次更新进度后,也同时更新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

下一次将为进度条加入动画特效

作者:YGL_9b35
链接:https://www.jianshu.com/p/878cd7982038
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读