Teniendo en cuenta el resultado del Objeto trayectoria cerrada es la siguiente:¿Cómo llenar un camino en Android con un degradado lineal?
pesar de que es un rectángulo que estoy buscando algo que funciona con cualquier trayectoria cerrada.
Teniendo en cuenta el resultado del Objeto trayectoria cerrada es la siguiente:¿Cómo llenar un camino en Android con un degradado lineal?
pesar de que es un rectángulo que estoy buscando algo que funciona con cualquier trayectoria cerrada.
Mientras respuesta Steelbytes' probablemente le dará un mayor control sobre las secciones individuales del gradiente, puede hacerlo sin la ruta:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Paint p = new Paint();
// start at 0,0 and go to 0,max to use a vertical
// gradient the full height of the screen.
p.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
canvas.drawPaint(p);
}
bien, pero NUNCA construye la instancia de Paint en los métodos onDraw (...) – ebtokyo
@ebtokyo: ¿Por motivos de rendimiento? ¿Lo guardaría en caché en la creación y actualizaría su tamaño en cada onDraw (o tal vez en tamaño)? – idbrii
Sí, por motivos de rendimiento. La pelusa comenta las asignaciones en onDraw() como esta: "Evite las asignaciones de objetos durante las operaciones de dibujo/disposición (preasignar y reutilizar en su lugar)" –
esto puede ayudar a
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int w = getWidth();
int h = getHeight();
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
Path pth = new Path();
pth.moveTo(w*0.27f,0);
pth.lineTo(w*0.73f,0);
pth.lineTo(w*0.92f,h);
pth.lineTo(w*0.08f,h);
pth.lineTo(w*0.27f,0);
p.setColor(0xff800000);
p.setShader(new LinearGradient(0,0,0,h,0xff000000,0xffffffff,Shader.TileMode.CLAMP));
canvas.drawPath(pth,p);
}
Un brillante, sin ¡una pregunta fantástica! – Subby