2013-03-01 17 views
12

'da overridePendingTransition kullanıldığında ekran rastgele yanıp söner Bu sorun bazen Jelly Bean 4.1 ve 4.2'de (Galaxy Nexus ve Nexus 4 üzerinde test edilmiştir) gerçekleşir. Yeni Aktivite başladığında İşte Ben overridePendingTransitionJöle Fasulye

nasıl kullanılacağı:

Intent intent = new Intent(ActivityA.this, ActivityB.class); 
startActivity(intent); 
overridePendingTransition(R.anim.transition_right_to_left, 
        R.anim.transition_right_to_left_out); 

zaman bir Etkinlik önceki bir

finish(); 
overridePendingTransition(R.anim.transition_left_to_right, R.anim.transition_left_to_right_out); 

transition_left_to_right için geri bitirmek

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
android:fromXDelta="-100%p" 
android:toXDelta="0" 
android:duration="@integer/transition_duration"/> 

transition_left_to_right_out

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
android:fromXDelta="0" 
android:toXDelta="100%p" 
android:duration="@integer/transition_duration"/> 
transition_right_to_left

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="100%p" 
android:toXDelta="0" 
android:duration="@integer/transition_duration"/> 

transition_right_to_left_out

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="0" 
android:toXDelta="-100%p" 
android:duration="@integer/transition_duration"/> 

Ve bunun ne kadar ekran yanıp: http://youtu.be/TUKRz2yVF6Q (sadece 01:00 dan olur)

whats biliyorum lütfen söyle Kodumda yanlışlık var ve neden cihaz ekranı yanıp sönüyor? Teşekkür ederim.

Düzenleme: Güvenilir Jelly Bean üzerinde ActivityOptions kullanmak ama senin animasyon XML dosyaları

android:fillAfter="true" 
+1

// // Schedules the shared element transition to be started immediately // after the shared element has been measured and laid out within the // activity's view hierarchy. Some common places where it might make // sense to call this method are: // // (1) Inside a Fragment's onCreateView() method (if the shared element // lives inside a Fragment hosted by the called Activity). // // (2) Inside a Picasso Callback object (if you need to wait for Picasso to // asynchronously load/scale a bitmap before the transition can begin). // // (3) Inside a LoaderCallback's onLoadFinished() method (if the shared // element depends on data queried by a Loader). // public void scheduleStartPostponedTransition(final ImageView sharedElement) { LogHelper.v(TAG, "scheduleStartPostponedTransition"); sharedElement.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sharedElement.getViewTreeObserver().removeOnPreDrawListener(this); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { startPostponedEnterTransition(); } return true; } }); } 

Bkz belirli ANDROID cihaz veya jöle fasulye destekleyen her android cihazda geliyor sorun var mı? –

+0

Bilmiyorum çünkü Galaxy Nexus ve Nexus 4 hariç test edilecek pek çok cihazım yok. – Wayne

+0

Ancak farklı OS sürümleri olan Farklı Öykünücüler üzerinde deneyebilirsiniz –

cevap

5

Ben aynı sorunu vardı. İnterpolator değerini accelerate_decelerate_interpolator yerine linear_interpolator olarak değiştirdim.

+0

Teşekkürler, sorun çözüldü! – Wayne

+1

Bu soruyu diğer forumlarda gönderdiyseniz, lütfen bu çözümü burada paylaşın ... –

2

deneyin yardım etmedi ayarlarında Geliştirici Seçenekleri bölümünde seçenekler açık mı?

+1

Cevabınız için teşekkür ederiz, ancak bu yardımcı olmadı ve overridePendingTransition için animasyonun fillAfter'a ihtiyaç duymadığını düşünüyorum. – Wayne

+1

'fillBefore' o zaman? Animasyonun ilk karesi statik (animasyonlu olmayan) görünüm çizildikten sonra çizilirse yanıp sönebilir - örneğin, önce 'view_tv_to_right' üzerinde olması muhtemeldir, çünkü hedef görünüm ilk önce ekrana çizilir ve başlar. Animasyon –

+0

FillBefore de başlamaz en kısa sürede ekrandan çıkmak. – Wayne

2

siz "bulundurmayın sahip olma ihtimali hem aşağıdaki satırı ekleyerek

+1

"Etkinlikler tutmayın" seçeneği etkin olmadığı için üzgünüm. – Wayne

-1

Aptalca öneri, ancak animasyonu/bitirme sırasını değiştirmeyi denediniz mi()? Bunun gibi

:

overridePendingTransition(R.anim.transition_left_to_right, R.anim.transition_left_to_right_out); 
finish(); 
+1

Üzgünüm, ancak Android dokümanı, overridePendingTransition öğesinin bitiş tarihinden hemen sonra çağrılması gerektiğini söyledi() veya startActivity() (http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int, int)). Zaten denedim ama elbette yardım edemezdi. – Wayne

0

Bunu, Etkinlik geçişlerini geciktirerek ve bazı görüntü öğelerini paylaşımlı öğe geçişi olarak "çapa" kullanarak çözebilirsiniz.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_match_score); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().setEnterTransition(null); 
    } 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     // Postpone the shared element enter transition. 
     postponeEnterTransition(); 
    } 
} 

Şimdi her şeyin yolunda ekranda görüntülenmesi gereken uygulamanızda bir noktadan '() scheduleStartPostponedTransition' çağırmanız gerekir. Bu teknik çok iyi çalışır ve aktiviteyi değiştirirken ekran flaşı problemini çözer. http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html

+0

API v20'de eklediğiniz önerme API'si - Jelly Bean API v16 –