Question

J'ai créé une classe RoundIcon qui étend View et la classe contient la méthode setIconImage ():

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

et il existe une méthode 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();
}

Le problème est que la fonction onDraw () ne s'exécute pas à chaque fois que la méthode setIconImage () est appelée depuis l'activité principale et que l'icône ne change donc pas dans l'interface utilisateur.

Quelqu'un sait-il comment modifier le code afin de redessiner une image chaque fois que la méthode setIconImage est appelée?

Était-ce utile?

La solution

Essayez d'appeler View.invalidate () à la place sur View.refreshDrawableState ()

Invalidate indique à la vue que tous les pixels de la vue doivent être redessinés. Si vous ne mettez à jour qu'une zone plus petite de la vue, examinez la surcharge invalidate (Rect) pour une amélioration des performances.

Autres conseils

Appelez définitivement invalidate au lieu de refreshDrawableState (). Vous voudrez peut-être vérifier sur quel fil vous êtes et si vous appelez en arrière-plan postInvalidate ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top