onGlobalLayoutFinished
görüntülendikten sonra bir etkinlikte bir görünümü canlandırıyorum. Animasyonum başlangıçta ~ 300 ms değerinde kareleri atlıyor. Animasyonu ~ 300 ms'den fazla geciktirirsem, herhangi bir kareyi atlamaz. Bunun gerçekleşmesine neden olan etkinlikte neler oluyor? Nasıl durdurabilirim veya bittiğinde nasıl dinleyebilirim?Etkinliğin başlangıcındaki animasyon kareleri atlar
Bu davranışı göstermek için son derece basit bir uygulama geliştirdim. AndroidManifest.xml <application>
arasında
içeriği:
<activity
android:name=".main.TestLagActivity"
android:label="Test Lag Activity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</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:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/activity_test_lag_redSquareView"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#FF0000"/>
</FrameLayout>
Bu tanıtımda, kırmızı kare 1000 milisaniyeden uzunluğunda soldan sağa 1000 piksele kadar hareket eder. Gecikme yapılmazsa, ilk 300 pikseli atlar. Gecikme ayarlanırsa, sorunsuz bir şekilde animasyon yapar. Lütfen aşağıdaki videoları izleyin.
yok gecikmesi (kareler atlıyor): https://www.youtube.com/watch?v=dEwvllhvvN0
400ms gecikme (Fames atlamak değil): https://www.youtube.com/watch?v=zW0akPhl_9I&feature=youtu.be
Herhangi yorumlarınızı bekliyoruz.
Gerçekten onPause ve onSaveInstanceState yöntemlerinizi ve potansiyel olarak görünüm hiyerarşinizi göstermeniz gerekir. OnSaveInstanceState'de onPause'da özel mantık engelleme olabilir veya onSaveInstanceState'de engelleyen özel bir görünümünüz olabilir. – dcow
"OnPause ve onSaveInstanceState, normal olarak, MainActivitede birbirinden 20 ms sonra gerçekleşir" ... CreatActivity'de farklı ne yapıyorsunuz? –
@dcow Günlük ifadelerinin yanı sıra yöntemlerin boş olduğunu belirtmeliydim. – clocksmith