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

Nei*_*end 9 android textview

假设一个textview

TextView tvSum = findViewById(R.id.sumTexviewId);
Run Code Online (Sandbox Code Playgroud)

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

tvSum.setText("£0.00");
Run Code Online (Sandbox Code Playgroud)

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

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

  • 0P (没什么压力)
  • 1P ("1"按下)
  • 12P (然后按下"2")
  • £1.23 (然后按下"3")

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

  • 混乱:12.34英镑 (然后按下"4")
  • 混乱:123.45英镑 (然后按下"5")

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

Nei*_*end 5

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

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

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

  1. 保留背景未指定.这也是透明的,但出于某种原因积极如此.
  2. 有任何完整的alpha背景.(下行:如果你想要一些透明度,则不起作用)
  3. 编写一个自定义视图,onDraw在调用之前覆盖以主动填充画布0x00 super.onDraw().(缺点:这摆脱了这个观点中的任何背景,但保留了这个观点背后的观点.

为"不做任何花哨的"声明道歉 - 我没有意识到积极地将背景设置为透明计算为幻想!