Etkinlik geçişlerinin paylaşılan öğe geçişlerine müdahale etmesini tamamen önleyin:
Çıkış etkinliğinde getWindow (). SetExitTransition (null);
Giriş etkinliğinde getWindow (). SetEnterTransition (null);
Gönderen https://stackoverflow.com/a/34907685/967131
Bunun yan etkileri olabileceğinden şüpheleniyorum, ancak kesin olarak bilmiyorum. Çok basit ve yine de çalışıyor.
Belirli öğelerin yanıp sönmesini önleyin:
Alex Lockwood'un cevabıyla başladım ve işe yaramaya çalışmak için biraz deney yaptım. Özü doğrudur, ancak alıcı Aktivite için önerdiği koda ihtiyacım olmasa da, onu bir Fragment (Aktivite yerine) olarak adlandırarak ve eylem çubuğu olarak bir araç çubuğu ayarlayarak bazı problemlerle karşılaştım.
Oh, Fragment olayı mı? Durum çubuğuna ve gezinme çubuğuna referanslar almaya çalışırken boş olan birçok yorum gördüm. Aynı şey bana da oldu, onları Fragment'in düzeninde bulamayacağımı anlayana kadar ... onlar bu seviyenin üstündeydiler. Bu nedenle, Aktiviteden dekor görünümünü almak ve bunu aramak için aşağıdaki kodu kullanın. Sonra onları sorunsuz buldum.
Sonunda, şu yardımcı yöntemi geliştirdim:
public static Bundle transitionOptions(Activity activity, int transitionViewResId, int transitionNameResId) {
if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
return null;
}
View decorView = activity.getWindow().getDecorView();
View statusBar = decorView.findViewById(android.R.id.statusBarBackground);
View navigationBar = decorView.findViewById(android.R.id.navigationBarBackground);
View appBarLayout = decorView.findViewById(**R.id.appbarlayout**);
View transitionView = decorView.findViewById(transitionViewResId);
String transitionName = activity.getString(transitionNameResId);
List<Pair<View, String>> pairs = new ArrayList<>();
pairs.add(Pair.create(statusBar, Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME));
pairs.add(Pair.create(navigationBar, Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME));
if (appBarLayout != null) {
pairs.add(Pair.create(appBarLayout, activity.getString(**R.string.transition_appbarlayout**)));
}
pairs.add(Pair.create(transitionView, transitionName));
//noinspection unchecked - we're not worried about the "unchecked" conversion of List<Pair> to Pair[] here
return ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs.toArray(new Pair[pairs.size()]))
.toBundle();
}
Not R.string.transition_appbarlayout ve R.id.appbarlayout . Bu kimlikler, kodunuzun kullandığı ile eşleştikleri sürece keyfidir. XML'imde, özel eylem çubuğunu şu şekilde düzenliyorum (esaslara göre düzenlenmiş):
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:id="**@+id/appbarlayout**"
android:transitionName="**@string/transition_appbarlayout**">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"/>
</android.support.design.widget.AppBarLayout>
Bunun gibi bir Araç Çubuğu kullanmazsanız, bu parça yardımcı program yönteminden kaldırılabilir.
Sonra Fragmanınızda şöyle çağırırsınız:
startActivity(intent, UIUtils.transitionOptions(getActivity(),
R.id.**my_view**,
R.string.**transition_my_view**));
XML'nizle eşleştiği sürece istediğiniz değerleri kullanın.
Bu, geçiş sırasında durum çubuğunun, araç çubuğunun ve gezinme çubuğunun (geri / ana sayfa / son uygulamalar düğmeleri) yanıp sönmesini engeller. Aktivite geçişinin geri kalanı normaldir.
Benim durumumda, uygulama temamız android:windowBackground
mavi. Bu, geçişte oldukça sinir bozucu olan mavi bir flaşa neden olur. Ancak, tüm uygulamayı bu şekilde etkileyen bir değişiklik yapmak yerine, şimdilik ilk, hızlı ve kirli seçeneği kullanıyorum.