美文网首页
2018-05-14

2018-05-14

作者: 大头鸟 | 来源:发表于2018-08-13 09:40 被阅读0次

                                                自定义View

    自定义一个View需要做的事情:

    1.继承View

    2.重写onDraw(Canvas c)方法

    3.更新View

    4.使用

    下面以自定义一个进度条为例,来详细探讨一下自定义View的过程:

    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中:

        android:layout_gravity="center"

        android:id="@+id/spb"

        android:layout_width="match_parent"

        android:layout_height="4dp"

        android:background="@color/colorAccent"/>

    接下来,就可以在Activity中,调用你所写自定义View来实现相关的功能了。

    实例应用:自定义View涉及到的知识有Canvas(画布),Paint(画笔)等,自定义控件分为三种:一是直接继承自View,完全的自定义;二是在原有控件的基础上进行改造,达到自己想要的效果;还有一种就是自定义组合控件,将已有的控件根据自己的需要进行组合实现的效果。下面做一个类似于QQ的计步效果的View,效果图如下:

    1.继承自View

    (1)重写3个构造方法(新的API中的构造方法是4个)

    (2)重写View的OnDraw方法

    注:在绘制稍复杂一点的View时,我们对画笔的要求可能更高,这里的paint初始化我放在了onDraw方法中进行的,当然你也可以放在有三个参数的构造方法中初始化。

    2.Paint初始化

    (1)圆弧的画笔mArcPaint

    (2)文字的画笔mTextPaint

    3.Canvas绘制

    (1)圆弧的绘制

    (2)文本的绘制

    4.添加动画效果及数据

    (1)动画效果

    (2)数据添加

    总结:设置Paint的画笔形状(Cap和Join设置为弧形);使用Canvas的drawArc方法绘制圆弧及drawText绘制文本信息等;ValueAnimator设置数据及当前圆弧进度的动画效果。

    相关文章

      网友评论

          本文标题:2018-05-14

          本文链接:https://www.haomeiwen.com/subject/kodjdftx.html