Android LinearGradient y extraño posicionamiento relativo
Tengo el código siguiente con un LinearGradient, que se parece mucho al igual que todos los otros ejemplos hacia fuera allí.
public class CustomColourBar extends View { public CustomColourBar( Context context, AttributeSet attribs ) { super( context, attribs ); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(170, 40); } @Override protected synchronized void onDraw( Canvas canvas ) { int height = this.getMeasuredHeight(); int width = this.getMeasuredWidth(); LinearGradient shader = new LinearGradient( 0, 0, 0, height, Color.RED, Color.YELLOW, Shader.TileMode.CLAMP ); Paint paint = new Paint(); paint.setShader(shader); RectF fgRect = new RectF( 0, 0, width, height); canvas.drawRoundRect(fgRect, 7f, 7f, paint); } }
En un diseño, esto produce lo siguiente, que es casi correcto:
- ¿Cómo hacer gradiente transparente?
- Desvanecimiento de la animación en forma de degradado de fondo
- Multi-gradiente de formas
- Gradiente Oval en Android
- Cómo colocar el fondo del gradiente radial
Sin embargo, cuando otras cosas cambian la posición Y de mi punto de vista, va mal:
El LinearGradient utiliza la posición absoluta respecto a la vista superior (es decir, el diálogo). No puedo por la vida de mí averiguar – ¿por qué?
¡Gracias!
Robar
- Bandas de colores únicamente en Android 4.0+
- LinearGradient Center Animation
- Cómo dibujar un degradado suave / degradado en un lienzo en Android
- Awful calidad de imagen de fondo en Android
Yo tuve el mismo problema. Las posiciones en el sombreador no son de forma sino de lienzo.
Por lo tanto usted necesita dibujar sus formas en el lienzo siempre alrededor del origo y traducir el lienzo con la posición deseada.
Por ejemplo:
NO HAGA:
canvas.drawCircle(posx, posy, radius);
HACER:
canvas.save(); canvas.translate(posx, posy); canvas.drawCircle(0,0,radius); canvas.restore();
Espero que ayudó! 😉
En el archivo de manifiesto android, elija la actividad que está utilizando y asegúrese de que la propiedad configChanges de la misma tenga orientación marcada