我想要实现的目标:
径向渐变,其起始和结束颜色会平滑地从一个定义的颜色变为另一个。
我尝试过的方法:
使用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());
这将随时间调用
DrawThread.setFraction(value);
。在线程内,我使用像这样的 SurfaceView
执行 Canvas
绘制: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);
问题:
- 渐变不平滑。图像看起来像低色彩
- 性能非常低。在FullHD Snapdragon 801设备上仅获得约16 FPS。
所以我想问的是,是否有任何帮助提高性能(甚至完全不同的方式),并改善结果图像质量的方法。
gradientDrawable.setColors(int[])
。 - BudiussetColors()
是在 API 16 中添加的。http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html#setColors(int[])而且对我来说完全不可能放弃旧版 API 的支持。 - Vladyslav Matviienko