首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android:如何重绘图形元素?

Android:如何重绘图形元素?
EN

Stack Overflow用户
提问于 2009-06-19 13:00:39
回答 2查看 53.9K关注 0票数 17

我创建了一个扩展视图的类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方法时重新绘制图像吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-19 13:58:51

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

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

票数 44
EN

Stack Overflow用户

发布于 2009-06-19 18:39:39

一定要调用invalidate而不是refreshDrawableState()。您可能想要检查您在哪个线程上,以及是否在后台调用postInvalidate()。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1017853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档