Android Studioandroid view相关和布局问题Android进阶之路

实现波浪圆形进度控件 WaveProgress

2017-02-14  本文已影响318人  Arestory

效果图

waveprogress.gif

绘制波浪效果

  1. 上图中有4条贝塞尔曲线(当然你也可以利用正弦曲线画,近段时间接触了贝塞尔曲线,所以用它来练手,如不了解贝塞尔曲线,麻烦先去百度),两条在屏幕外,两条在屏幕外
  2. 将这四条曲线闭合。
  3. 然后将图中每条贝塞尔曲线的点(起点,控制点,终点)按照一定速率向右偏移
  4. 当 P1点移动到 P5点的位置,动画结束一次。
  5. 只要不断重复以上的动画,则产生了波浪的效果。
  6. 仔细观察GIF 图可以发现,由于深色波浪后还有浅色的波浪,导致波浪有一定立体感,浅色波浪只需要基于深色波浪的位置向左作一定偏移即可。

波浪代码

定义

测量完 view 的实际宽度后,设置各个点的值,请耐心看如何设置每个点的坐标,亦可根据自己需求设置

在 onDraw 方法中执行,其中变量 move 是向右偏移的量

执行循环动画,不断更改move的值,从0增加到view的宽度

实现的效果

如何将波浪困在圆内

用 Path 画一个圆,然后利用 Path 的特性,得到圆 path与波浪path 的交集,不需要再画 wavePath,画出这个交集 path 即可 (** PS: 需要4.4.2以上)**

水平面上升

当前 view 的高度为圆的直径即****2radius****,根据当前进度计算出水平面高度= 直径进度( 0~1 ),根据高度改变贝塞尔曲线相关点的 Y 坐标

用途

  1. 显示下载进度
  2. 显示电量
  3. 显示手机可用内存占比
    ...

原文请戳

http://ares-space.com/2017/02/13/%E5%AE%9E%E7%8E%B0%E6%B3%A2%E6%B5%AA%E5%9C%86%E5%BD%A2%E8%BF%9B%E5%BA%A6%E6%8E%A7%E4%BB%B6WaveProgress/

完整代码

https://github.com/yuwenque/BezierLearning/blob/master/app/src/main/java/ares/ywq/com/bezierlearning/view/WaveProgress.java

上一篇下一篇

猜你喜欢

热点阅读