你多久可以更新一次textview而不会搞乱

时间:2013-05-10 21:49:35

标签: android textview

假设一个textview

TextView tvSum = findViewById(R.id.sumTexviewId);

如果我想更改显示的文字,我会这样做:

tvSum.setText("£0.00");

现在,假设我经常这样做,每次按下一个按钮时都说,也许显示在一个按钮上输入的总和。在这个例子中,你按一个,它说“1p”,然后你按两个,它说“12p”,依此类推。

我发现如果我这样做,文本会在一段时间后失真。对于序列12345,从一切开始是好的:

  • 0p(尚无任何压力)
  • 1p(按下“1”)
  • 12p(然后按下“2”)
  • £1.23(然后按下“3”)

然而,事情变得混乱之后:

  • Mess: £12.34(然后按下“4”)
  • Mess: £123.45(然后按下“5”)

此后再好不过了。我没有发布代码,因为代码真的很简单:一堆按钮,只写一个短字符串到一个textview - 代码中的任何内容都不应该导致这个,诚实。 (是的,我已经通过将其写在Toast上来检查正在编写的字符串是否正确。)有没有其他人遇到过这个问题,如果有的话会解决它?

1 个答案:

答案 0 :(得分:5)

事实证明Mr.Me正朝着正确的方向前进,并且它与文本更改时渲染背景的方式有关。我使用颜色0x00000000设置(有意)按钮在黄色轮廓内部有透明背景(而不是未指定)。

出于某种原因,当应用非完全不透明的填充时,新的背景将覆盖在先前的内容上(我认为是大约3个位图的循环),而不是定义内容。我想这可能是由于Canvas使用的默认PorterDuff传输模式。

我在解决这个问题时想出的解决方案:

  1. 未指定背景。这也是透明的,但出于某种原因是积极的。
  2. 拥有完整的alpha背景。 (下行:如果你想要一些透明度,则不起作用)
  3. 在调用onDraw之前,编写一个覆盖super.onDraw()的自定义视图以主动填充画布0x00。 (缺点:这摆脱了这个观点中的任何背景,但保留了这个观点背后的观点。
  4. 抱歉“没有做任何花哨的事”声明 - 我没有意识到积极地将背景设置为透明计算为幻想!