17

我创建了一个类 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();
}

问题是每次从主活动调用方法 setIconImage() 时,函数 onDraw() 都不会执行,因此用户界面中的图标不会改变。

有谁知道如何修改代码以便在每次调用 setIconImage 方法时重绘图像?

4

2 回答 2

44

尝试调用View.invalidate()而不是View.refreshDrawableState()

Invalidate 将告诉视图需要重绘视图中的所有像素,如果您只更新视图的较小区域,请查看 invalidate(Rect) 重载以提高性能。

于 2009-06-19T13:58:51.123 回答
7

绝对调用 invalidate 而不是 refreshDrawableState()。您可能想检查您使用的线程以及是否在后台调用 postInvalidate()。

于 2009-06-19T18:39:38.853 回答