在视图上调用onGlobalLayoutFinished后,我在动画中设置视图动画.我的动画在开始时跳过~300 ms的帧.如果我将动画延迟超过300毫秒,它不会跳过任何帧.导致这种情况发生的活动是怎么回事?我怎么能阻止它或者我怎么能听完呢?
我创建了一个死的简单应用程序来演示这种行为.
< application>的内容在AndroidManifest.xml中:
android:name=".main.TestLagActivity"
android:label="Test Lag Activity">
TestLagActivity.java:
public class TestLagActivity extends ActionBarActivity {
private View mRedSquareView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_lag);
mRedSquareView = findViewById(R.id.activity_test_lag_redSquareView);
if (mRedSquareView.getViewTreeObserver() != null) {
mRedSquareView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
mRedSquareView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
animate();
}
});
}
}
private void animate() {
ObjectAnimator xAnimator = ObjectAnimator.ofFloat(mRedSquareView, "x", 0, 1000);
xAnimator.setDuration(1000);
xAnimator.start();
}
}
activity_test_lag.xml:
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/activity_test_lag_redSquareView"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#FF0000"/>
在此演示中,红色方块在1000毫秒内从左向右移动1000个像素.如果没有设置延迟,它会大致跳过前300个像素.如果设置了延迟,则可以平滑地动画.请看下面的视频.
欢迎任何评论.