Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 07/03/13, 20:36:19
Array

[xs_avatar]
ico87 ico87 no está en línea
Miembro del foro
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic

Dibujar rectangulos en un View

Buenas

Me parece algo demasiado sencillo, pero no consigo hacerlo, tengo un pequeño imageView (podria usar cualquier otra componente) en la que según ciertas operaciones tengo que dibujar un rectangulo de uno u otro tamaño y en una posición distinta. Pero no consigo encontrar por internet a pesar de lo basico que me parece, un ejemplo que me saque de la duda, alguien me puede poner alguno.

Saludos
Responder Con Cita


  #2  
Viejo 07/03/13, 20:46:47
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Mira aquí mismo: http://www.sgoliver.net/blog/?p=1655

La clave es redefinir el método onDraw(Canvas canvas) de la clase, y con el canvas pintas lo que quieras.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 07/03/13, 20:54:22
Array

[xs_avatar]
ico87 ico87 no está en línea
Miembro del foro
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic

Y como puedo redefinir el método onDraw de un componente que instancio de la forma:

priva ImageView imageViewRectangle = (ImageView) findViewById(R.id.ImageViewRectangle);

Gracias por contestar!
Responder Con Cita
  #4  
Viejo 07/03/13, 21:10:50
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Tienes que crear una clase derivada de View (o de TextView o de ImageView o de la que quieras, y así te ahorras código para calcular el tamaño).

En el XML tienes que indicar el nombre completo de la clase, p.ej. com.pepito.RectangleView

Y en el código Java en vez de manejar ImageView o View, como es un control personalizado y querrás controlarlo, usas directamente tu clase personalizada.

EDITO: En la misma web lo explican mejor en un capítulo anterior: http://www.sgoliver.net/blog/?p=1457
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #5  
Viejo 07/03/13, 22:12:21
Array

[xs_avatar]
ico87 ico87 no está en línea
Miembro del foro
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic

ok, muchas gracias, me pilla ya un poco tarde, pero lo leo mañana con detenimiento!!
Responder Con Cita
  #6  
Viejo 09/03/13, 18:18:23
Array

[xs_avatar]
ico87 ico87 no está en línea
Miembro del foro
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic

Pues muchas gracias mocelet, ya lo he hecho asi y me inicializa el rectangulo perfecto:

public void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1, p1);
}

pero ahora quiero que cuando hace la aplicacion ciertos calculos, ese rectangulo varie. ¿Como puedo hacer esto? He probado haciendo en la clase un metodo como este:

public void drawRect(float left, float top, float right, float bottom){
Canvas canvas = new Canvas();
super.onDraw(canvas);
canvas.drawRect(left, top, right, bottom, p1);
}

y desde la interfaz lo llamo cuando tiene que cambiar, pero el rectangulo no cambia...
Responder Con Cita
  #7  
Viejo 09/03/13, 20:05:26
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
El código del onDraw está mal.

Funcionar funciona, pero siempre irás con 1 frame de retraso. Además de que deberías limpiar el Canvas antes de pintarlo, sobre todo si tu intención es moverlo.

El código debería ser:

public void onDraw(Canvas canvas){
canvas.drawColor(Color.BLACK);
canvas.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1, p1);
super.onDraw(canvas);
}

En cuanto a la segunda parte, no puedes llamar al onDraw cuando te de la gana, sólo si usas un SurfaceView. Lo que si que puedes hacer es hacer globales las variables left, top, right y bottom (o mejor aún, el Rect en si) y pintarlo usando las variables. Lo que necesitarás después es "setear" al Rect o a las posiciones.

public void onDraw(Canvas canvas){
canvas.drawColor(Color.BLACK);
canvas.drawRect(left, top, right, bottom, p1);
super.onDraw(canvas);
}

public void setRect(float left, float top, float right, float bottom)
{
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
Responder Con Cita
  #8  
Viejo 19/03/13, 20:38:24
Array

[xs_avatar]
ico87 ico87 no está en línea
Miembro del foro
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic

Perdonad el retraso, que ando de curro hasta las cejas. Me ha funcionado perfectamente. Muchas gracias.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:08:54 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /