0

レイアウト幅の変更をアニメーション化しようとしています。アニメーション化しようとしているレイアウト要素は 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% を費やしていると言います。

それで、この問題を解決する方法はありますか?

4

0 に答える 0