Android: как перерисовать графический элемент?

Я создал класс RoundIcon, который расширяет представление, и класс содержит метод setIconImage ():

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

и есть метод 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();
}

проблема в том, что функция onDraw() не выполняется каждый раз, когда метод setIconImage() вызывается из основного действия, и поэтому значок не изменяется в пользовательском интерфейсе.

кто-нибудь знает, как изменить код, чтобы перерисовывать изображение каждый раз, когда метод setIconImage называется?

2 ответов


позвонить вид.признать недействительными() вместо вид.refreshDrawableState ()

Invalidate сообщит представлению, что все пиксели в представлении должны быть перерисованы, если вы обновляете только меньшую область представления, посмотрите на перегрузку invalidate(Rect) для повышения производительности.


определенно вызовите invalidate вместо refreshDrawableState (). Возможно, вы захотите проверить, какой поток включен и если на фоновом вызове postInvalidate().