一个Marquee TextView跑马灯故障的排查

应用:一个悬浮窗应用,Layout为多重RelativeLayout镶嵌,里面有两个TextView,一个是显示倒计时的TextView,一个是显示文本滚动的TextView,均已经设置为Marquee跑马灯滚动

 

故障现象:模拟器中运行时正常,但真机运行时倒计时的跑马灯TextView每更新一次内容(每秒一次),就导致另外一个跑马灯TextView的文本内容从头开始滚动,导致文本内容永远只能看到开头一小部分,一直处于抽搐状态。

 

假想:可能是倒计时更新之后导致的问题,发现停止倒计时线程运作后现象消失。猜测有可能是子控件刷新的时候,RelativeLayout作为父控件触发了所有的子控件重新onMeasure测量一次大小,并重新按照子控件大小确定新的位置所致。

 

实验:因此继承了TextView实现了一个子类MarqueeTextView,并重写onMeasure方法,里面加一段Log,发现确实倒计时TextView刷新一次,所有子控件都onMeasure了一下,最后把外层控件有relativeLayout改为FrameLayout+偏移的实现 或 LinearLayout均不会触发子控件不停onMeasure,问题解决

 

需要的知识:对安卓控件绘制流程有记忆,明白绘制流程的概念。

你可能感兴趣的:(安卓开发)