android 属性动画ValueAnimator改变控件宽度丢帧。求大神解答。

ValueAnimator colseAnimator = ValueAnimator.ofFloat(closeWidth, 0);
colseAnimator.addUpdateListener(new AnimatorUpdateListener() {

        LinearLayout.LayoutParams params = (LayoutParams) 
                closeView.getLayoutParams();
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {

            float f = (Float) animation.getAnimatedValue();
            params.width = (int) f;
            closeView.requestLayout();
        }
    });

http://blog.csdn.net/harvic880925/article/details/50525521

你这种改变宽度的方法不对把,你的移动计算和宽度有关系的话,你再根据计算结果去修改宽度,肯定会造成丢帧,你的f值获取方式换一下

图片说明

首先说明一点,你的用法完全正确,是没有问题的。StackOverflow上有人说:“如果你在ValueAnimator里改变LayoutParams,你将度过糟糕的一天。”但是,目前为止,
在ValueAnimator里改变LayoutParams确实是动态更改控件宽高的方便做法。接下来解答一下,既然方法正确,为什么还会卡顿呢,原因有二:
① 你的控件很重,或者包含了很重的子控件。比如,你的控件是一个ImageView,它的src是一张很大的图片(5MB以上)。你试着把该控件换成
轻量级的控件,比如一个只有文字的TextView,你就会发现,如丝般顺滑了。
解决方法:减少布局层次,尽量减少很重的控件,如果是图片类,建议先将图片进行Bitmap压缩,再set给ImageView。
② 控件是很重的ImageView,没有进行Bitmap压缩,而对应的图片又放错了目录。比如,一张 3508 x 2480分辨率的图片,大小达到了惊人的5MB,
你却把它放在了错误的目录下,比如,你把它放在了xhdpi,或hdpi,或mdpi的目录下。
解决方法:建议放在xxhdpi等大图目录下,最好放到最大的mipmap-xxxhdpi目录里。如果还不行,建议放到drawable里试试。