Vla*_*nko 5 performance animation android gradient
径向渐变,开始和结束的颜色随着时间的推移从一种定义的颜色平滑地变化到另一种。
像这样使用 ObjectAnimator:
searchAnimator = ObjectAnimator.ofFloat(drawThread, new Property<DrawThread, Float>(Float.TYPE, "fraction") {
@Override
public Float get(DrawThread object) {
return object.fraction;
}
@Override
public void set(DrawThread object, Float value) {
object.setFraction(value);
}
}, 0, 1);
searchAnimator.setDuration(maxSearchDuration);
searchAnimator.setInterpolator(new LinearInterpolator());
Run Code Online (Sandbox Code Playgroud)
这会DrawThread.setFraction(value);随着时间的推移而调用 。在线程中,我Canvas使用SurfaceView如下方式执行绘图:
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setDither(true);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
radius = (int) Math.sqrt(canvas.getWidth() / 2 * canvas.getWidth() / 2 + canvas.getHeight() / 2 * canvas.getHeight() / 2);
//calculating colors for current fraction using ARGBEvaluator
int start = (int) argbEvaluator.evaluate(fraction, colors[0].start, colors[1].start);
int end = (int) argbEvaluator.evaluate(fraction, colors[0].end, colors[1].end);
//end
mPaint.setShader(new RadialGradient(canvas.getWidth() / 2, canvas.getHeight() / 2,
radius, start, end, Shader.TileMode.CLAMP));
canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, radius, mPaint);
Run Code Online (Sandbox Code Playgroud)
所以我想问的是在提高性能(甚至完全不同的方式)和提高图像质量方面的任何帮助。
也许这段伪代码有帮助:
private ValueAnimator colorAnimation;
colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), startColor, endColor);
// you can add more colors here
colorAnimation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
yourView.setBackgroundColor((Integer) animator
.getAnimatedValue());
}
});
colorAnimation.setDuration(maxSearchDuration);
colorAnimation.start();
}
Run Code Online (Sandbox Code Playgroud)