动画在Android上绘制画布路径

Gnu*_*rou 5 graphics android canvas

我想为一条路径的绘制设置动画,即让它逐渐出现在屏幕上.我正在使用画布,到目前为止我最好的猜测是使用ObjectAnimator来处理动画.但是,我无法弄清楚如何在onDraw()方法中实际绘制路径的相应段.有没有一种方法可以做到这一点?我需要为此涉及路径效应吗?

编辑:使用DashPathEffect并在动画中设置其"on"和"off"间隔以覆盖我们想要为该步骤绘制的路径部分似乎在这里工作,但它需要为每个步骤分配一个新的DashPathEffect动画.如果有更好的方法,我会保留问题.

Gnu*_*rou 10

回答我自己的问题,因为我想出了一个令人满意的方法来做到这一点.

诀窍是使用a ObjectAnimator来逐步改变笔划的当前长度,并使用a DashPathEffect来控制当前笔划的长度.在DashPathEffect将拥有破折号参数最初设置为以下几点:

float[] dashes = { 0.0f, Float.MAX_VALUE };
Run Code Online (Sandbox Code Playgroud)

第一个浮动是可见行程的长度,第二个是不可见部分的长度.第二长度选择得非常高.因此,初始设置对应于完全不可见的笔划.

然后,每次对象动画师更新笔画长度值时,DashPathEffect都会使用新的可见部分创建一个新的并设置为Painter对象,并且视图无效:

dashes[0] = newValue;
mPaint.setPathEffect(new DashPathEffect(dashes, 0));
invalidate();
Run Code Online (Sandbox Code Playgroud)

最后,onDraw()方法使用此画家绘制路径,该路径仅包含我们想要的部分:

canvas.drawPath(path, mPaint);
Run Code Online (Sandbox Code Playgroud)

我看到的唯一缺点是我们必须在每个动画步骤创建一个新的DashPathEffect(因为它们不能被重用),但是全局这是令人满意的 - 动画很好而且流畅.