6

Yeni Materyal Tasarımı etkinlik animasyonlarının bazılarını uygulamaya çalışıyorum, ancak okuduğum dersler yalnızca animasyonun görünümünün etkinliğe ait olduğu örnekleri gösterir. Benim appListeler/ızgaralar/geri dönüşümcü görünümleri kullanılırken etkinlik geçişleri nasıl canlandırılır?

ImageView faaliyetin bir parçası değildir bu yüzden, ben bir RecyclerView kullanıyorum:

: Okuduğum kadarıyla, böyle yeni bir etkinlik başlatmak gerekiyor itibaren

MainActivity    -> Where I call startActivity() 
↳ MainFragment 
    ↳ RecyclerView 
    ↳ RecyclerViewAdapter 
    ↳ ViewHolder 
    ↳ ImageView   -> The hero imageView I'd like to animate 

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, (View) mImageView, "hero_image"); 

Intent intent = new Intent(this, SecondActivity.class); 
startActivityForResult(intent, options.toBundle()); 

Soru şu: mImageView, MainActivity'a ait değil. Nasıl geçmeliyim?

+0

"Ana Verimlilik'e ait değil", bu nedenle Etkinlik ekranınızda görünmüyor mu? Görünürse, bu sizin Faaliyetiniz – pskink

+0

'a aittir. Doğrudan aktivitede şişirilmedim. Adaptörde şişirilmiş, bu nedenle etkinlik o görünüme referans göstermiyor. – Guilherme

+0

Bağdaştırıcı değil, bağdaştırıcının ayarladığı görünüm, bu görüntüye referans tutuyor – pskink

cevap

1

Örneğinizde, Etkinliği aynı şekilde başlatırsınız. Görünüm, Etkinliğin Görünüm Hiyerarşisinin bir parçasıdır, bu nedenle çağrı hala geçerlidir. Çıkış geçişi olduğunda, çıkış geçişinde kullanılacak Görünümlerden çıkmak için Aktivitenin Görünüm Hiyerarşisi aranır. Paylaşılan öğelerin içinden çıkmaması için nesneleri paylaşılan öğelerle karşılaştırır.

Bir RecyclerView kullanırken, büyük olasılıkla reentran geçişi hakkında endişelenmeniz gerekecektir. RecyclerView, Görünümlerin herhangi birini veya tamamını geri dönüştürebilir. Paylaşılan öğelerinizi (veya olası paylaşılan öğeleri) benzersiz adlar vermediyseniz, doğru Görünüm'ün kullanıldığından emin olmak için onMapSharedElements uygulamasını uygulamanız gerekir. Her öğeye benzersiz bir geçiş adı (dinamik olarak) verdiğiniz olası paylaşılan öğelerin listesini kullanırken her zaman bunu öneriyorum. Bu şekilde çerçeve, geri döndüğünde hangi Görünümü kullanacağını otomatik olarak belirleyebilir.

+0

Sanırım Görünümün, etkinliğin hiyerarşisinin bir parçası olduğunu anladım, ancak "RecyclerView" öğesinin bu belirli öğesinin söz konusu "ImageView" öğesine nasıl başvurulacağını bilmiyorum. – Guilherme

+0

Bunu yapmanın birçok yolu vardır ve uygulamanızın nasıl yazıldığına bağlıdır. StartActivity çağrısını tetikleyen paylaşılan öğenin yakınında bir kullanıcı eylemi (tıklama dinleyicisi) varsa, tıklanan Görünüm, belirli bir ImageView öğesini bulmak için findViewById ile kullanılabilir. Tıklanan Görünüm bir kuzen ise, hiyerarşiye çıkmak zorunda kalabilirsiniz. Tıklama ilişkili değilse (örneğin, "işaretli öğeyi aç" düğmesi), Görüntülemelerinizi kendi yolunuzdan takip etmeniz gerekir. findViewWithTag() veya findViewHolderForItemId() yardımcı olabilir. RecyclerView ile dikkatli olun - ekran dışı herhangi bir öğe paylaşılmayacaktır. –