Вопрос

Я создал класс 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?

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top