2 qq 36340344 qq_36340344 于 2017.01.16 16:37 提问

android属性动画卡顿问题,求大神指点迷津。

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.setLayoutParams(params);
        }
    });

5个回答

p0pp0p0
p0pp0p0   2017.01.16 16:49
已采纳

你可以尝试从这几个方面处理一下:
1. 既然params.width是int类型的, 那么就不要使用ValueAnimator.ofFloat,直接使用ValueAnimator.ofInt, 避免强制类型转换。
2. setLayoutParams后索性直接调用一下invalidate(),
3. ValueAnimator如果时间太短的话可能导致回调onAnimationUpdate次数少, 看起来卡顿, 适当延长时间,
另外interpolator(虽然你这里没有写)如果你有指定的话,尽量使用默认构造函数,不要指定小数,那将引发大运算量

p0pp0p0
p0pp0p0 一般情况下, 如果认为动画卡断, 停掉其他的异步任务, 或者单独开一个小demo验证是不是真的是动画有问题, 如果是动画问题再单独修改动画, 感觉你的动画思路是对的。
11 个月之前 回复
qq_36340344
qq_36340344 回复p0pp0p0: 只有一个时间刷新的异步任务,但我设置的是一分钟一次。
11 个月之前 回复
qq_36340344
qq_36340344 大神下面是我要实现的效果,文字的收缩和展开,可能我的思路不对,能不能提供一下思路呢?感谢!
11 个月之前 回复
p0pp0p0
p0pp0p0 回复hnahdfhb: 从log截图上是看不出来有没有丢帧的, 不知道你有没有在动画的进行过程中执行异步逻辑处理, 如果有的话,是会有卡顿的
11 个月之前 回复
qq_36340344
qq_36340344 按照ofInt还是卡顿,像您说的回调onAnimationUpdate次数少,延长时间的话,但我动画不能再延长时间了,不能太慢。
11 个月之前 回复
qq_36340344
qq_36340344 感谢回答!
11 个月之前 回复
qq_36340344
qq_36340344   2017.01.16 17:11

图片说明

qq_36340344
qq_36340344   2017.01.16 17:11

图片说明

qq_36590778
qq_36590778   2017.01.16 17:15

可以跟着这个从头做一遍,看看还会不会出现卡顿现象>>Android开发-属性动画项目公开课

qq_36340344
qq_36340344   2017.01.16 17:16

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!