我尝试制作扩展的布局动画和translationImageView动画,但是我将它们一起启动时看起来有些迟钝。我在真实设备Moto X(2013)上进行了测试。不确定是否有功能更强大的设备,因为默认情况下,我所有的模拟电话都比较滞后:)。

我也尝试打开HardwareType

View.setLayerType(View.LAYER_TYPE_HARDWARE, null);

但这也没有得到结果。

所以这是翻译代码:

 ObjectAnimator translate = ObjectAnimator.ofFloat(view, "translationX", 0f, 380.0f);

    translate.setDuration(500);
    translate.setInterpolator(new LinearInterpolator());
    translate.start();


和布局扩展:

va = ValueAnimator.ofInt(340, 904);
    va.setDuration(500);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {
            Integer value = (Integer) animation.getAnimatedValue();
            user_container.getLayoutParams().height = value.intValue();
            user_container.requestLayout();
            System.out.println("value = " + value.intValue() );
        }
    });


没什么特别的。那么,有人可以告诉我,如何及时制作动画而不迟钝吗?

最佳答案

首先,您应该衡量所花费的时间。如果您有自定义视图,通常是您的绘制方法。如果不是这样,您通常会在主线程上执行其他花费过多时间的事情-即移动或更新正在访问I / O或类似对象的侦听器。

尝试踢出入门级的日志行。并不要仅呼叫requestLayout()看看发生了什么以及是否有区别。如果您的user_container非常复杂,那么您肯定会感到落后。

顺便说一句,如果您要测试的设备之间可能有所不同,请不要使用模拟器:)

10-04 23:04