我创建了一个扩展视图的类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方法时重新绘制图像吗?
发布于 2009-06-19 13:58:51
尝试调用View.invalidate()而不是View.refreshDrawableState()
Invalidate将告诉视图需要重新绘制视图中的所有像素,如果您只更新视图的较小区域,请查看invalidate(Rect)重载以提高性能。
发布于 2009-06-19 18:39:39
一定要调用invalidate而不是refreshDrawableState()。您可能想要检查您在哪个线程上,以及是否在后台调用postInvalidate()。
https://stackoverflow.com/questions/1017853
复制相似问题