Spanish Borrar graficos

cas6678

Active Member
Licensed User
Longtime User
Tengo un problema que supongo tiene facil solucion pero no la encuentro....:mad:

Llamo a una activity donde tengo un panel y dentro de el por medio de un canvas hago un grafico de barras. Hasta ahi ok, sin problema.

El tema es que luego quiero hacer graficos nuevos con datos diferentes y me los superpone. No encuentro la manera de borrar el grafico anterior.

Ideas?

Graicas.
 

Myr0n

Active Member
Licensed User
Longtime User
Una idea puede ser que antes de mostrar un gráfico muestres un canvas vacío en la misma posición y mismadimensión que tu gráfico, bueno eso hago yo algunas veces, probablemente hay otras soluciones.
 

JordiCP

Expert
Licensed User
Longtime User
Creo que tambien puedes hacer
B4X:
Canvas.DrawColor(Colors.Transparent)
 

cas6678

Active Member
Licensed User
Longtime User
Gracias a los dos. Estoy un poco pez en esto y con los graficos se me complica. El primero sale genial pero luego al querer poner e el mismo sitio no logro dominarlo. Como solucion provisional y ya que el grafico esta en un modulo de activity separado lo que hago es salir y voler a entrar en ella y asi vamos avanzando.

Tengo que seguir aprendiendo. jej.
 

JordiCP

Expert
Licensed User
Longtime User
Ir probando es la mejor manera de aprender ;)

De todas maneras, prueba la solución que te dije arriba con Colors.Transparent (si la imageView no tiene fondo y quieres que se vea lo de abajo) o Colors.White (o el que sea) si el fondo de tu imageview es opaco. Debería dejarte la Imageview "como nueva"
 

cas6678

Active Member
Licensed User
Longtime User
Me sucede lo siguiente:

Es un grafico que ocupa casi toda toda la pantalla (90%x, 90%y, centrado, dejando un borde por los cuatro costados. Lo he probado tanto directamente en una activity como sobre un panel. Siguiendo tu consejo he puesto un boton que su unica mision es llamar a tu propuesta: Canvas.DrawColor(Colors.Transparent).
Mi sorpresa fue grande cuando vi que solo me limpiaba la parte superior del grafico. Para tratar de entender que pasaba cambie el trasparent por blue y vi que por alguna razon que no alcanzo a entender el propio boton limita el area en donde se aplica la instruccion. Solo me pinta de azul lo que hay del boton hacia arriba. Si voy cambiando el boton de lugar me cambia el area de pintado. Aclaro que el boton esta a mitad de altura a la derecha de la pantalla.

He intentado ver otros ejemplos, por ejemplo el de un reloj analogico, y he visto que lo hacen a traves de activity.invalidate que refresca todo pero a mi no me funciona. Creo que por ahi van mis problemas no entiendo muy bien como trabaja esta intruccion (invalidate) ni como se producen las inicializaciones. Que diferencia hay entre por ejemplo:

B4X:
btn1.initialize("btn1")
btn1.initialize("")
btn1.initialize(activity)
 

JordiCP

Expert
Licensed User
Longtime User
Si solo te dibuja una parte es posible que hayas utilizado el método "ClipPath" del canvas. Si es así, antes del "Canvas.DrawColor" deberías poner un "Canvas.RemoveClip" para que el canvas vuelva a apuntar a toda la area de dibujo.

En cuanto a la segunda pregunta, la correcta es la primera. El "btn1" es el nombre del evento al que se va a llamar cuando hagas click,
B4X:
Sub btn1_click
   'aqui el codigo para hacer algo cuando se clicke el boton
End Sub

A la segunda no le veo sentido (un boton sin evento para cuando le hagas click) y la tercera me suena a incorrecta.
 

Myr0n

Active Member
Licensed User
Longtime User
Puedes colgar un proyecto funcional y asi tener una idea mas congreta por favor, no necesariamente tiene que ser tu proyecto, mas que todo haz como un demo.

Gracias.
 
Top