レイアウト幅の変更をアニメーション化しようとしています。アニメーション化しようとしているレイアウト要素は RelativeLayout です。ALIGN_PARENT_BOTTOM ルールで配置された TextView が含まれています。RelativeLayoutビューグループを拡張して、コードからすべてを作成しています。
以下はコンストラクターの一部です。
1 title = new TextView(c);
2 LayoutParams tvParams = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
3 tvParams.addRule(ALIGN_PARENT_BOTTOM);
4 title.setLayoutParams(tvParams);
5 title.setText(this.feed.title);
6 this.addView(title);
そして、これは ValueAnimator です:
mScaleX = ValueAnimator.ofInt(mParamsOriginal.width, mParamsLarge.width);
mScaleX.setInterpolator(new LinearInterpolator());
mScaleX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();
layoutParams.width = val;
requestLayout();
}
});
次に、行 2 ~ 4 にコメントを付けて、TextView をレイアウトに配置するだけで問題なく動作します。それ以外の場合、プロファイラーはビューの継続的な再測定を引き起こし、デバイスはプロセッサ時間の 90% を費やしていると言います。
それで、この問題を解決する方法はありますか?