studio programacion para libros gratis español edición desarrollo desarrollar aprende aplicaciones android user-interface refresh

programacion - Android: ¿Cómo volver a dibujar un elemento gráfico?



manual programacion android español pdf (2)

He creado una clase RoundIcon que amplía la vista y la clase contiene el método setIconImage ():

public void setIconImage(int imageFromResources) { iconImage = BitmapFactory.decodeResource(getResources(), imageFromResources); iconWidth = iconImage.getWidth(); iconHeight = iconImage.getHeight(); refreshDrawableState(); }

y hay un método onDraw ():

@Override protected void onDraw(Canvas canvas) { if(px == 0 || py == 0) { px = 50; py = 50; } canvas.drawCircle(px, py, circleRadius, circlePaint); canvas.save(); if(iconImage != null) { int cardinalX = px - iconWidth/2; int cardinalY = py - iconHeight/2; canvas.drawBitmap(iconImage, cardinalX, cardinalY, iconPaint); } canvas.restore(); }

El problema es que la función onDraw () no se ejecuta cada vez que se llama al método setIconImage () desde la actividad principal y, por lo tanto, el icono no cambia en la interfaz del usuario.

¿Alguien sabe cómo modificar el código para volver a dibujar una imagen cada vez que se llama al método setIconImage?


Definitivamente llame a invalidate en lugar de refreshDrawableState (). Es posible que desee comprobar en qué hilo está encendido y si está en una llamada de fondo postInvalidate ().


Intente llamar a View.invalidate() lugar de View.refreshDrawableState()

Invalidate indicará a la vista que todos los píxeles de la vista se deben volver a dibujar, si solo está actualizando un área más pequeña de la vista en la sobrecarga de invalidación (Rect) para un aumento de rendimiento.