Android:如何重绘图形元素?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

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

有没有人知道如何修改代码,以便每次调用setIconImage方法时重新绘制图像?

提问于
用户回答回答于

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

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

用户回答回答于

绝对调用invalidate而不是refreshDrawableState(),这样你可能想要检查你的线程以及是否在后台调用postInvalidate()。

扫码关注云+社区