Özel geçiş, şurada kullanılamayan bir animasyon oluşturabilmenizi sağlar: yerleşik geçiş sınıflarından bahsedeceğiz. Örneğin, her ay gördüğünüz gibi metnin ve giriş alanlarının devre dışı bırakıldığını göstermek için ön plan rengi griye döner seçeneğini tıklayın. Bu tür değişiklikler, kullanıcıların devre dışı bıraktığınız alanları görmesine yardımcı olur.
Yerleşik geçiş türlerinden biri gibi özel bir geçiş, sahnelerin her ikisinde de çocuklar tarafından görüntülenebilir. Ancak, yerleşik geçiş türlerinin aksine özellik değerlerini yakalayan ve animasyonlar oluşturan kodu sağlamanız gerekir. Animasyonunuz için hedef görünümlerinin bir alt kümesini tanımlamak da isteyebilirsiniz.
Bu sayfada, özellik değerlerini yakalamayı ve yüksek kaliteli animasyonlar oluşturmak için kullandığınızdan emin olun.
Geçiş sınıfını genişletme
Özel bir geçiş oluşturmak için projenize Transition
sınıfını genişleten bir sınıf ekleyin ve aşağıdaki snippet'te gösterilen işlevleri geçersiz kılın:
Kotlin
class CustomTransition : Transition() { override fun captureStartValues(transitionValues: TransitionValues) {} override fun captureEndValues(transitionValues: TransitionValues) {} override fun createAnimator( sceneRoot: ViewGroup, startValues: TransitionValues?, endValues: TransitionValues? ): Animator? {} }
Java
public class CustomTransition extends Transition { @Override public void captureStartValues(TransitionValues values) {} @Override public void captureEndValues(TransitionValues values) {} @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) {} }
Aşağıdaki bölümlerde, bu işlevlerin nasıl geçersiz kılınacağı açıklanmaktadır.
Görünüm özelliği değerlerini yakalayın
Geçiş animasyonları, Mülk animasyonuna genel bakış. Özellik animasyonlar, bir görünüm özelliğini başlangıç değerinden belirli bir değere göre bitiş değerine değiştirir olmalıdır. Bu nedenle, çerçevenin hem başlangıç hem de bitiş animasyonu oluşturmak için kullanılır.
Bununla birlikte, bir mülk animasyonu genellikle görünümün tüm mülkünün yalnızca küçük bir alt kümesine ihtiyaç duyar değerler. Örneğin, bir renk animasyonu için renk özelliği değerleri gerekirken, bir hareket animasyon için konum özelliği değerleri gerekiyor. Bir animasyon için gereken özellik değerleri bir geçişe özgüyse, geçiş çerçevesi her özellik değerini sağlamaz, değer katarlar. Bunun yerine, çerçeve tarafından verilen geri çağırma işlevlerini çağırarak gereken özellik değerlerini yakalayabilir ve çerçevede depolayabilirsiniz.
Başlangıç değerlerini yakalayın
Başlangıç görünümü değerlerini çerçeveye iletmek için
captureStartValues(transitionValues)
.
işlevini kullanın. Çerçeve, başlangıç sahnesindeki her görünüm için bu işlevi çağırır. İşlev
bağımsız değişkeni, başvuru içeren bir TransitionValues
nesnesi
depolayabileceğiniz görünüm değerlerini depolayabileceğiniz bir Map
örneği
gerekir. Uygulamanızda, bu özellik değerlerini alın ve
saklayarak yerleşik çerçeve oluşturmanıza yardımcı olur.
Bir özellik değeri anahtarının, diğer
TransitionValues
anahtarları için aşağıdaki adlandırma şemasını kullanın:
package_name:transition_name:property_name
Aşağıdaki snippet'te captureStartValues()
işlevinin bir uygulaması gösterilmektedir:
Kotlin
class CustomTransition : Transition() { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private val PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background" override fun captureStartValues(transitionValues: TransitionValues) { // Call the convenience method captureValues captureValues(transitionValues) } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private fun captureValues(transitionValues: TransitionValues) { // Get a reference to the view val view = transitionValues.view // Store its background property in the values map transitionValues.values[PROPNAME_BACKGROUND] = view.background } ... }
Java
public class CustomTransition extends Transition { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private static final String PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background"; @Override public void captureStartValues(TransitionValues transitionValues) { // Call the convenience method captureValues captureValues(transitionValues); } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private void captureValues(TransitionValues transitionValues) { // Get a reference to the view View view = transitionValues.view; // Store its background property in the values map transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground()); } ... }
Bitiş değerlerini yakalayın
Çerçeve, captureEndValues(TransitionValues)
işlevini çağırır
son sahnedeki her hedef görüntüleme için bir kez. Diğer tüm açılardan captureEndValues()
, captureStartValues()
ile aynı şekilde çalışır.
Aşağıdaki kod snippet'i, captureEndValues()
işlevinin bir uygulamasını göstermektedir:
Kotlin
override fun captureEndValues(transitionValues: TransitionValues) { captureValues(transitionValues) }
Java
@Override public void captureEndValues(TransitionValues transitionValues) { captureValues(transitionValues); }
Bu örnekte, hem captureStartValues()
hem de captureEndValues()
işlevleri, değerleri almak ve depolamak için captureValues()
yöntemini çağırır. Görünüm özelliği
captureValues()
parametresi aynı kalır ancak
sahneleri anlatacağım. Çerçeve, başlangıç ve bitiş tarihleri için ayrı haritalar tutar
bir görünüm oluşturabilirsiniz.
Özel animatör oluşturma
Bir görünümün başlangıç sahnesindeki durumu ile
Sahneyi geçersiz kılarak bir
animatör sağlayın.
createAnimator()
.
işlevini kullanın. Çerçeve bu işlevi çağırdığında, sahne kök görünümüne geçer ve
Başlangıç ve bitiş değerlerini içeren TransitionValues
nesne
gösteren bir özettir.
Çerçevenin createAnimator()
işlevini çağırma sayısı,
Başlangıç ve bitiş sahneleri arasında meydana gelen değişikliklerdir.
Örneğin, renk geçişi
kararma animasyonu, özel bir geçiş olarak uygulanmıştır. Başlangıç sahnesinde beş hedef varsa
Bunlar bitiş sahnesinden kaldırılır ve bitiş sahnesinde, sahneden itibaren üç hedef bulunur
başlangıç sahnesi artı yeni bir hedef, ardından çerçeve createAnimator()
öğesini altı kez çağırır.
Çağrılardan üçü, her iki sahnede de kalan hedeflerin kararmasını ve kararmasını canlandırıyor
nesneler'i tıklayın. İki arama daha, bitiş sahnesinden kaldırılan hedeflerin yavaşça kaybolmasına neden olur. Bir
çağrısı, bitiş sahnesinde yeni hedefin yavaşça geçişini canlandırır.
Çerçeve, hem başlangıç hem de bitiş sahnelerinde bulunan hedef görünümler için
Hem startValues
hem de startValues
için bir TransitionValues
nesnesi
endValues
bağımsız değişken. Yalnızca başlangıç veya
kapanış sahnesinde, çerçeve bir TransitionValues
nesnesi sağlar
karşılık gelen bağımsız değişken için, diğeri için null
.
Oluştururken createAnimator(ViewGroup, TransitionValues, TransitionValues)
işlevini uygulamak için
bir Animator
nesnesi oluşturmak ve bunu çerçeveye döndürmek için yakaladığınız görünüm özelliği değerlerini kullanın. Örnek bir uygulama için
içindeki ChangeColor
sınıfını görün.
CustomTransition örneği. Özellik animatörleri hakkında daha fazla bilgi için
Mülk animasyonu.
Özel geçiş uygulama
Özel geçişler, yerleşik geçişlerle aynı şekilde çalışır. Özel bir geçiş uygulayabilirsiniz (Geçiş uygulama bölümünde açıklandığı gibi) bir geçiş yöneticisi kullanarak.