Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ObjectAnimator在Android 4.4(nexus 5)上以帧跳转开始,但在4.1设备中不使用_Android_Android Layout_Android Animation_Android 4.4 Kitkat_Objectanimator - Fatal编程技术网

ObjectAnimator在Android 4.4(nexus 5)上以帧跳转开始,但在4.1设备中不使用

ObjectAnimator在Android 4.4(nexus 5)上以帧跳转开始,但在4.1设备中不使用,android,android-layout,android-animation,android-4.4-kitkat,objectanimator,Android,Android Layout,Android Animation,Android 4.4 Kitkat,Objectanimator,我有一个简单的活动,用ObjectAnimator显示动画。动画是在活动的onCreate方法中创建和启动的,它是一个非常简单的动画: cloudAnim = ObjectAnimator.ofFloat(cloud1ImageView, "x", sw); cloudAnim.setDuration(35000); cloudAnim.setRepeatCount(ValueAnimator.INFINITE); cloudAnim.setRep

我有一个简单的活动,用ObjectAnimator显示动画。动画是在活动的onCreate方法中创建和启动的,它是一个非常简单的动画:

cloudAnim = ObjectAnimator.ofFloat(cloud1ImageView, "x", sw);
        cloudAnim.setDuration(35000);
        cloudAnim.setRepeatCount(ValueAnimator.INFINITE);
        cloudAnim.setRepeatMode(ValueAnimator.RESTART);
        cloudAnim.setInterpolator(null);
        cloudAnim.start();
它只是在屏幕左侧显示一个云,并从左向右移动

问题是,在我的Nexus5(android 4.4Lastet版本)中,当活动开始时,云正在进行帧跳转

这个跳跃只在我的nexus 5中可见,因为我也在一台装有android 4.1的华为ascend y300设备上测试该应用程序,跳跃不可见,移动非常平稳

ObjectAnimator和Android 4.4有什么问题


谢谢

在onCreate中启动动画不是一个好主意。当用户最终能够看到该动画时(在活动膨胀并在屏幕上显示动画等之后),动画不在其开头,而是在其后面一点,因此用户将错过动画的最开始,或者可能会看到一些帧下降。最终结果取决于设备、android版本、标准窗口动画样式等

如果要在创建活动后立即启动动画,请使用onWindowFocusChanged方法:

当活动的当前窗口获得或失去焦点时调用。 这是该活动是否对用户可见的最佳指示器 用户


此外,您还需要进行一些检查:

1.窗口具有焦点(hasFocus==true)-用户可以看到它 2.创建指示动画已启动的布尔变量,以便仅启动一次
因此,在onCreate中创建cloudAnim对象是可以的,但是启动它应该在onWindowFocusChanged方法中完成。

我尝试过,它也有同样的失败。。。完全相同的问题我猜您已经从onCreate中删除了“cloudAnim.start();”?请给这个动画一些延迟,比如5秒),以确保activi创建不会影响它)-只是为了测试framedrop是否与activity创建相关,或者它是否在任何时候发生。顺便问一下,为什么要使用“setInterpolator(null);”??空值在此处无论如何都不应有效。。。如果要使用默认的LinearInterpolator,只需删除这一行即可。仅供参考:null有效(请检查对象animator扩展的animator类的值),默认插值器为AcceleratedAccelerate,而不是linear@Whitney:谢谢!您完全正确地认为AccelerateDecelerate是Animator中的默认值。我把它和Animation类弄错了,LinearInterpolator是默认值。
private boolean cloudAnimStarted;

@Override
public void onWindowFocusChanged (boolean hasFocus) {
   super.onWindowFocusChanged(hasFocus);
   if (hasFocus && !cloudAnimStarted) {
       cloudAnimStarted = true;
       cloudAnim.start();
   }
}