作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设一个 TextView
TextView tvSum = findViewById(R.id.sumTexviewId);
如果我想更改显示的文本,我会这样做:
tvSum.setText("£0.00");
现在,假设我经常这样做,比如每次按下按钮时,可能会显示收银台上输入的总和。在这个例子中,你按一个,它说“1p”,然后你按两个,它说“12p”等等。
我发现如果我这样做,文本会在一段时间后变得扭曲。对于序列 12345,从一切开始都是好的:
然而,在那之后事情变得一团糟:
此后情况永远不会好转。我没有发布代码,因为代码真的很简单:一堆按钮,只向一个 TextView 写入一个短字符串——老实说,代码中的任何内容都不会导致这种情况。 (是的,我已经通过将其放在 Toast 上来检查正在写入的字符串是否正确。)还有其他人遇到过这个问题吗?如果是的话,是什么解决了这个问题?
最佳答案
原来是Mr.Me一直在寻找正确的方向,这与文本更改时呈现背景的方式有关。我已经(有意地)将按钮设置为在黄色轮廓内具有透明背景(而不是未指定),使用颜色 0x00000000。
出于某种原因,在应用非完全不透明填充时,新背景会覆盖之前的内容(我认为是大约 3 个位图的循环),而不是定义内容。我猜这可能是由于 Canvas 使用的默认 PorterDuff 传输模式所致。
我在解决这个问题时想到的解决方案:
onDraw
的自定义 View ,以便在调用 super.onDraw()
之前主动用 0x00 填充 Canvas 。 (缺点:这摆脱了这个 View 中的任何背景,但保留了这个 View 后面的 View 。为“不做任何花哨的”声明道歉 - 我没有意识到主动将背景设置为透明算作花哨!
关于android - 您多久可以更新一次 textview 而不会弄乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16491280/
我是一名优秀的程序员,十分优秀!