Android: как перерисовать графический элемент? - PullRequest
17 голосов
/ 19 июня 2009

Я создал класс RoundIcon, который расширяет View, и класс содержит метод 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 ]

44 голосов
/ 19 июня 2009

Попробуйте вызвать View.invalidate () вместо View.refreshDrawableState ()

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

7 голосов
/ 19 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...