Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 07/03/13, 20:36:19
Avatar de ico87
ico87 ico87 no está en línea
Miembro del foro
Mensajes: 40
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
  #3  
Viejo 07/03/13, 20:54:22
Avatar de ico87
ico87 ico87 no está en línea
Miembro del foro
Mensajes: 40
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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
Responder Con Cita
  #5  
Viejo 07/03/13, 22:12:21
Avatar de ico87
ico87 ico87 no está en línea
Miembro del foro
Mensajes: 40
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de ico87
ico87 ico87 no está en línea
Miembro del foro
Mensajes: 40
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de ico87
ico87 ico87 no está en línea
Miembro del foro
Mensajes: 40
 
Fecha de registro: ene 2010
Mensajes: 40
Modelo de smartphone: htc magic
Mencionado: 0 comentarios
Tagged: 0 hilos
Perdonad el retraso, que ando de curro hasta las cejas. Me ha funcionado perfectamente. Muchas gracias.
Responder Con Cita
Respuesta

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


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 15:25:07 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007