Android4.4 TextView走馬灯カートン問題
2314 ワード
この間Androidシステムをメンテナンスしていたところ、TextViewに遭遇し、ランニングライトを追加するとUIにカートンが現れる.この場合、Android TextViewのソースコードについて一連の分析とテストを行い、最終的に原因を見つけました.
コンストラクション関数のコードを変更する前に:
変更後:
まとめ:注釈を落とした箇所の機能はTextView程度の陰影部分であり,注釈を落とした後,走馬灯の左右に陰影効果がないため,この問題を根治するものではなく,変相の最適化としか言いようがない.でも影の効果を比べたことがあるので、特に注意しないと何の違いも見えません.Android4.4 UIを描くのはちょっと質問ですが、サーバでWindowManagerを使ってUIを描く場合、明らかにAndroid 5より5.0以上のカードが多くて、具体的な原因はあまりついていないで、引き続きついていく大神がいて、原因を見つけたら、分かち合って、感謝します!
コンストラクション関数のコードを変更する前に:
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;
}
......
}
まとめ:注釈を落とした箇所の機能はTextView程度の陰影部分であり,注釈を落とした後,走馬灯の左右に陰影効果がないため,この問題を根治するものではなく,変相の最適化としか言いようがない.でも影の効果を比べたことがあるので、特に注意しないと何の違いも見えません.Android4.4 UIを描くのはちょっと質問ですが、サーバでWindowManagerを使ってUIを描く場合、明らかにAndroid 5より5.0以上のカードが多くて、具体的な原因はあまりついていないで、引き続きついていく大神がいて、原因を見つけたら、分かち合って、感謝します!