Android仿微信录制小视频的进度条

前言

仿微信录制短视频 库中有一个自定义的View,就是录制视频时的进度条。其实现的原理很简单。

progress.gif

实现思路

可以假设进度条是一段距离(s),甲从左边出发,乙右边出发,以相同的速度(v)跑向中点。如图:

WechatIMG23.jpeg

那只需计算出甲或者乙每秒行走的距离,重新绘制进度条即可。

核心代码


 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        long currTime = System.currentTimeMillis();

        if(mState == State.START){
            int measuredWidth = getMeasuredWidth();

            float mSpeed = measuredWidth / 2.0f / maxTime; //速度   = 甲的距离 / 总时间

            float druTime = (currTime - startTime);   // 时间

            if(druTime >= minTime){ //如果时间 大于 设置的最少时间 改变进度的颜色
                mPaint.setColor(progressColor);
            }


            float dist = mSpeed * druTime; // s= v * t 甲 在druTime 行走的距离

            if(dist < measuredWidth/2.0f){  //判断是否到达终点

                canvas.drawRect(dist,0.0f,measuredWidth - dist,getMeasuredHeight(),mPaint);//绘制进度条
                invalidate();//重绘

            }
        }else{
            return;
        }
        canvas.drawRect(0.0f, 0.0f, 0.0f, getMeasuredHeight(), mPaint);
    }
   
     

drawRect 参数的理解

官方文档定义

drawRect(float left, float top, float right, float bottom, Paint paint)

通过一张图来了解drawRect的参数

drawRect

然后我们在看看上述代码:


 canvas.drawRect(dist,0.0f,measuredWidth - dist,getMeasuredHeight(),mPaint);//绘制进度条


可以看到 top ,和 bottom 不变。

left:dist 随着时间的增加 而 增加 。
rigth:(measuredWidth - dist)随着 dist 的增加而减少。

从而 达到了上面演示的效果。

Demo :Github

END.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 1. 四线格与基线 小时候,我们在刚开始学习写字母时,用的本子是四线格的,我们必须把字母按照规则写在四线...
    addapp阅读 7,769评论 2 17
  • 系列文章之 Android中自定义View(一)系列文章之 Android中自定义View(二)系列文章之 And...
    YoungerDev阅读 4,467评论 3 11
  • 前言: 在接触Android这么长时间,看到很多大牛都在和大家分享自己的知识,深有体会,刚好前段时间写了一个Dem...
    杨艳伟阅读 1,307评论 0 5
  • 版权声明:本文为博主原创文章,未经博主允许不得转载 前言 Canvas 本意是画布的意思,然而将它理解为绘制工具一...
    cc荣宣阅读 41,641评论 1 47
  • 胡歌,中国男演员、男歌手、中国电视剧飞天奖最年轻“优秀男演员”、上海市旅游形象大使、获得“亚洲电视剧研讨会10周年...
    Maggie燥与郁阅读 298评论 0 1