我尝试制作扩展的布局动画和translation
的ImageView
动画,但是我将它们一起启动时看起来有些迟钝。我在真实设备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
非常复杂,那么您肯定会感到落后。
顺便说一句,如果您要测试的设备之间可能有所不同,请不要使用模拟器:)