假设一个textview
TextView tvSum = findViewById(R.id.sumTexviewId);
如果我想更改显示的文字,我会这样做:
tvSum.setText("£0.00");
现在,假设我经常这样做,每次按下一个按钮时都说,也许显示在一个按钮上输入的总和。在这个例子中,你按一个,它说“1p”,然后你按两个,它说“12p”,依此类推。
我发现如果我这样做,文本会在一段时间后失真。对于序列12345,从一切开始是好的:
然而,事情变得混乱之后:
此后再好不过了。我没有发布代码,因为代码真的很简单:一堆按钮,只写一个短字符串到一个textview - 代码中的任何内容都不应该导致这个,诚实。 (是的,我已经通过将其写在Toast上来检查正在编写的字符串是否正确。)有没有其他人遇到过这个问题,如果有的话会解决它?
答案 0 :(得分:5)
事实证明Mr.Me正朝着正确的方向前进,并且它与文本更改时渲染背景的方式有关。我使用颜色0x00000000设置(有意)按钮在黄色轮廓内部有透明背景(而不是未指定)。
出于某种原因,当应用非完全不透明的填充时,新的背景将覆盖在先前的内容上(我认为是大约3个位图的循环),而不是定义内容。我想这可能是由于Canvas使用的默认PorterDuff传输模式。
我在解决这个问题时想出的解决方案:
onDraw
之前,编写一个覆盖super.onDraw()
的自定义视图以主动填充画布0x00。 (缺点:这摆脱了这个观点中的任何背景,但保留了这个观点背后的观点。抱歉“没有做任何花哨的事”声明 - 我没有意识到积极地将背景设置为透明计算为幻想!