Android 绘制动画(波浪动画/轨迹动画/PathMeasure)
本文由 Luzhuo 编写,转发请保留该信息.
原文: https://blog.csdn.net/rozol/article/details/79730582
绘制动画, 由Android的绘画功能 + 属性动画 组成的一种动画
主要方法
valueAnimator.addUpdateListener(AnimatorUpdateListener)
// 监听动画数值更新估值器
ValueAnimator.ofObject(new TypeEvaluator<PointF>() { @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { // fraction(时间因子[0,1]), startValue(开始值), endValue(结束值) return null; // 返回计算结果值 } });
波浪动画
原理: 通过动画计算的数值, 不断将波浪右移.
代码
protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPath.reset(); mPath.moveTo(-waveLength + offset, centerY); // 绘制2个贝塞尔曲线 for (int i = 0; i < waveCount; i++){ mPath.quadTo( - waveLength * 3 / 4 + i * waveLength + offset, centerY + 60, - waveLength / 2 + i * waveLength + offset, centerY); mPath.quadTo( - waveLength / 4 + i * waveLength + offset, centerY - 60, i * waveLength + offset, centerY); } // 封闭波浪 mPath.lineTo(screenWidth, screenHeight); mPath.lineTo(0, screenHeight); mPath.close(); canvas.drawPath(mPath, mPaintBezier); } public void onClick(View v) { // 设置属性动画 valueAnimator = valueAnimator.ofInt(0, waveLength); valueAnimator.setDuration(1000); valueAnimator.setRepeatCount(ValueAnimator.INFINITE); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate