我有一个简单的活动,用ObjectAnimator显示动画。动画是在活动的onCreate方法中创建和启动的,它是一个非常简单的动画:
cloudAnim = ObjectAnimator.ofFloat(cloud1ImageView, "x", sw);
cloudAnim.setDuration(35000);
cloudAnim.setRepeatCount(ValueAnimator.INFINITE);
cloudAnim.setRepeatMode(ValueAnimator.RESTART);
cloudAnim.setInterpolator(null);
cloudAnim.start();
它只是在屏幕左侧显示一个云,并从左向右移动。
问题是在我的nexus 5(android 4.4 lastet版本)中,当活动开始时,云正在进行帧跳转。
这个跳转只能在我的nexus 5中看到,因为我正在使用android 4.1测试应用程序中的huawei上升y300,并且跳转不可见,运动非常流畅。
ObjectAnimator和Android 4.4有什么问题?
由于
答案 0 :(得分:0)
在onCreate中开始动画不是一个好主意。当用户最终能够看到这个动画时(在活动被充气并在屏幕上显示动画等)之后,动画不在它的开头而是在它之后,所以用户将错过最开始的动画或者也许会看到一些帧丢失。最终结果实际上取决于设备,Android版本,标准窗口动画样式等。
如果要在创建活动后立即启动动画,请使用 onWindowFocusChanged 方法: http://developer.android.com/reference/android/app/Activity.html#onWindowFocusChanged(boolean)
当活动的当前窗口获得或失去焦点时调用。 这是该活动是否可见的最佳指标 用户。
另外你需要做一些检查:
private boolean cloudAnimStarted;
@Override
public void onWindowFocusChanged (boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && !cloudAnimStarted) {
cloudAnimStarted = true;
cloudAnim.start();
}
}
因此在onCreate中创建 cloudAnim 对象很好,但启动它应该在onWindowFocusChanged方法中完成。