/ / Чи підтримує Android нелінійну прогрес у градієнтах? - андроїд, градієнт

Чи підтримує Android нелінійну прогрес у градієнтах? - андроїд, градієнт

Я хотів би отримати градієнт, який проходить від aпочати колір до кінцевого кольору за нелінійною швидкістю. Градієнт змінюється лише вздовж однієї декадентської осі. RadialGradient або SweepGradient це не те, про що я маю на увазі тут.

Моє питання полягає в тому, чи забезпечує Android підтримку керування швидкістю переходу градієнта без написання власного шейдера?

Відповіді:

1 для відповіді № 1

Так, до певної міри. LinearGradient має конструктор, що займає декілька кольорів та позицій, тому ви можете наближати нелінійну прогресію за допомогою штучної лінійної функції.

Нижче наведено код на основі відповіді https://stackoverflow.com/a/4381192/8568479

ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient gradient = new LinearGradient(0, 0, width, height,
new int[] {
Color.parseColor("#000000"),
Color.parseColor("#777777"),
Color.parseColor("#FFFFFF")
},
new float[] { 0, 0.3f, 1 },
Shader.TileMode.REPEAT
);
return gradient;
}
};

PaintDrawable p = new PaintDrawable();
p.setShape(new RectShape());
p.setShaderFactory(shaderFactory);

Ви можете додати стільки зупинок, скільки потрібно, щоб градієнт виглядав гладким. Я також вважаю цю посилання корисною для вибору коефіцієнтів для плавного градієнта https://css-tricks.com/easing-linear-gradients/