Özel geçiş animasyonu oluşturma

Ö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.