自定义View系列(1)--加载动画LoadingView

来源:互联网 发布:python自动化测试虫师 编辑:程序博客网 时间:2024/05/17 04:58

自定义View系列(1)–加载动画LoadingView

也看了很长时间的自定义View了,觉得可以做一些练手的自定义View,才有了写这些博客的想法,有不足之处希望大家及时谅解。
本文的自定义View主要用到了Path,PathMeasure这两种组件,主要讲一下PathMeasure的一些方法,

构造方法:

方法名 含义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path, boolean forceClosed) 创建并且关联一个指定的Path

公共方法:这里之讲解用到的几个,其他的可以自己去看看。

方法名 含义 getLength() 获取Path的长度 getSegment(float startD, float stopD, Path dst, boolean startWithMoveTo) 截取Path的部分片段 getPosTan(float distance, float[] pos, float[] tan) 获取指定长度的位置坐标及该点切线值

getSegment(float startD, float stopD, Path dst, boolean startWithMoveTo)参数含义:

  • startD:开始截取位置距离 Path 起点的长度(起点)
  • stopD:结束截取位置距离 Path 起点的长度(终点)
  • dst:截取的 Path 将会添加到 dst 中
  • startWithMoveTo:起始点是否使用 moveTo,本例中直接true就可以,false效果大家可以试试。

直接上主要代码了:

private void initView() {
mPaint=new Paint();
mPaint.setStrokeWidth(10);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setColor(Color.WHITE);
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);

    initPath();    postDelayed(new Runnable() {        @Override        public void run() {            setAnimation();        }    },200);}private void initPath() {    load_path=new Path();    RectF rectF=new RectF(-100,-100,100,100);    load_path.addArc(rectF,270,359.9f);    measure=new PathMeasure();}public void setAnimation(){    ValueAnimator valueAnimator=ValueAnimator.ofFloat(0.0f,1.0f);    valueAnimator.setDuration(2000);    valueAnimator.setRepeatCount(ValueAnimator.INFINITE);    valueAnimator.setRepeatMode(ValueAnimator.RESTART);    valueAnimator.setInterpolator(new LinearInterpolator());    valueAnimator.start();    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {        @Override        public void onAnimationUpdate(ValueAnimator animation) {            currentValues= (float) animation.getAnimatedValue();            invalidate();        }    });}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {    super.onSizeChanged(w, h, oldw, oldh);    mCenterX=w/2;    mCenterY=h/2;}@Overrideprotected void onDraw(Canvas canvas) {    super.onDraw(canvas);    canvas.translate(mCenterX,mCenterY);    canvas.drawColor(Color.parseColor("#32bf82"));    measure.setPath(load_path,false);    Path dst = new Path();    float stop = measure.getLength() * currentValues;    float start = (float) (stop - ((0.5 - Math.abs(currentValues - 0.5)) * 200f));    measure.getSegment(start,stop,dst,true);    canvas.drawPath(dst,mPaint);}</php>留了好久的自定义View,想看效果的也可以直接把以上代码复制到自己的Android Studio上查看效果,因为本人不会录制GIf视频,所以如果需要代码的可以直接私信我邮箱2860605483@qq.com谢谢大家了,哈哈!
原创粉丝点击