前段時(shí)間在維護(hù)Android系統(tǒng)的時(shí)候氓润,遇到TextView谤专,一旦添加了跑馬燈后舟舒,UI就出現(xiàn)卡頓的情況怠噪。針對(duì)這個(gè)情況瞭吃,對(duì)Android TextView的源碼進(jìn)行了一系列的分析和測(cè)試碌嘀,最終找到了原因,如下:
在構(gòu)造函數(shù)里面的一段代碼
修改前:
public TextView(Context context, AttributeSet attrs, int defStyle) {
......
switch (ellipsize) {
case 1:
setEllipsize(TextUtils.TruncateAt.START);
break;
case 2:
setEllipsize(TextUtils.TruncateAt.MIDDLE);
break;
case 3:
setEllipsize(TextUtils.TruncateAt.END);
break;
case 4:
if (ViewConfiguration.get(context).isFadingMarqueeEnabled()) {
setHorizontalFadingEdgeEnabled(true);
mMarqueeFadeMode = MARQUEE_FADE_NORMAL;
} else {
setHorizontalFadingEdgeEnabled(false);
mMarqueeFadeMode = MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;
}
setEllipsize(TextUtils.TruncateAt.MARQUEE);
break;
}
......
}
修改后:
public TextView(Context context, AttributeSet attrs, int defStyle) {
......
switch (ellipsize) {
case 1:
setEllipsize(TextUtils.TruncateAt.START);
break;
case 2:
setEllipsize(TextUtils.TruncateAt.MIDDLE);
break;
case 3:
setEllipsize(TextUtils.TruncateAt.END);
break;
case 4:
/*if (ViewConfiguration.get(context).isFadingMarqueeEnabled()) {
setHorizontalFadingEdgeEnabled(true);
mMarqueeFadeMode = MARQUEE_FADE_NORMAL;
} else {
setHorizontalFadingEdgeEnabled(false);
mMarqueeFadeMode = MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;
}*/
setEllipsize(TextUtils.TruncateAt.MARQUEE);
break;
}
......
}
總結(jié):
注釋掉的地方的功能是TextView左右的陰影部分歪架,注釋掉后股冗,跑馬燈左右沒有陰影效果,所以也不算是根治此問題和蚪,只能夠說變相的優(yōu)化了止状。但是我對(duì)比過要不要陰影的效果烹棉,不特別去注意的話是看不出有什么不同的。Android4.4繪制UI感覺是有些問問題怯疤,在Server使用WindowManager畫UI的時(shí)候峦耘,明顯比Android5.0以上卡很多,具體原因沒有過多去跟了旅薄,有繼續(xù)往下跟的大神辅髓,找到原因了的話,可以分享一下少梁,感謝洛口!