Hızla kaydırma animasyonu kullanarak görünümleri taşıma

Yazma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Oluşturma'da animasyonları nasıl kullanacağınızı öğrenin.

Fırlatma tabanlı animasyon, bir nesnenin hızıyla orantılı bir sürtünme kuvveti kullanır. Bir nesnenin özelliğine animasyon eklemek ve animasyonu kademeli olarak sonlandırmak için kullanılır. Çoğunlukla hareket hızından kaynaklanan bir başlangıç momentumu vardır ve bu momentum kademeli olarak yavaşlar. Animasyonun hızı, cihaz ekranında görünür bir değişiklik yapmayacak kadar düşük olduğunda animasyon sona erer.

1. şekil. Fırlatma animasyonu

İlgili konular hakkında bilgi edinmek için aşağıdaki kılavuzları inceleyin:

AndroidX kitaplığını ekleme

Fizik tabanlı animasyonları kullanmak için AndroidX kitaplığını projenize aşağıdaki şekilde eklemeniz gerekir:

  1. Uygulama modülünüzün build.gradle dosyasını açın.
  2. AndroidX kitaplığını dependencies bölümüne ekleyin.

    Groovy

            dependencies {
                implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
            }
            

    Kotlin

            dependencies {
                implementation("androidx.dynamicanimation:dynamicanimation:1.0.0")
            }
            

Hızla kaydırma animasyonu oluşturma

FlingAnimation sınıfı, bir nesne için kaydırma animasyonu oluşturmanıza olanak tanır. Fırlatma animasyonu oluşturmak için FlingAnimation sınıfının bir örneğini oluşturun ve bir nesne ile nesnenin animasyonunu yapmak istediğiniz özelliğini sağlayın.

Kotlin

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

Java

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);

Hızı ayarlama

Başlangıç hızı, animasyon özelliğinin animasyonun başında değiştiği hızı tanımlar. Varsayılan başlangıç hızı saniyede sıfır piksel olarak ayarlanır. Bu nedenle, animasyonun hemen bitmemesi için başlangıç hızı tanımlamanız gerekir.

Başlangıç hızı olarak sabit bir değer kullanabilir veya bunu dokunma hareketinin hızına göre belirleyebilirsiniz. Sabit bir değer sağlamayı seçerseniz değeri saniye başına dp olarak tanımlamalı, ardından saniye başına piksele dönüştürmelisiniz. Değeri saniyede dp olarak tanımlamak, hızın cihazın yoğunluğundan ve biçim faktörlerinden bağımsız olmasını sağlar. Başlangıç hızını saniyede piksele dönüştürme hakkında daha fazla bilgi için Spring Animation (Yayın Animasyonu) bölümündeki Saniyede dp'yi saniyede piksele dönüştürme başlıklı makaleyi inceleyin.

Hızı ayarlamak için setStartVelocity() yöntemini çağırın ve hızı saniyede piksel cinsinden iletin. Yöntem, hızın ayarlandığı kaydırma nesnesini döndürür.

Not: Dokunma hareketlerinin hızını sırasıyla almak ve hesaplamak için GestureDetector.OnGestureListener ve VelocityTracker sınıflarını kullanın.

Animasyon değeri aralığı ayarlama

Özellik değerini belirli bir aralıkla sınırlamak istediğinizde minimum ve maksimum animasyon değerlerini ayarlayabilirsiniz. Bu aralık denetimi, özellikle alfa (0 ile 1 arasında) gibi doğal bir aralığa sahip özellikleri animasyonlandırırken kullanışlıdır.

Not: Fırlatma animasyonunun değeri minimum veya maksimum değere ulaştığında animasyon sona erer.

Minimum ve maksimum değerleri ayarlamak için sırasıyla setMinValue() ve setMaxValue() yöntemlerini çağırın. Her iki yöntem de değeri ayarladığınız animasyon nesnesini döndürür.

Sürtünmeyi ayarlama

setFriction() yöntemi, animasyonun sürtünmesini değiştirmenize olanak tanır. Animasyonda hızın ne kadar hızlı azalacağını tanımlar.

Not: Animasyonun başında sürtünmeyi ayarlamazsanız animasyonda varsayılan sürtünme değeri olan 1 kullanılır.

Yöntem, animasyonunda sağladığınız sürtünme değerinin kullanıldığı nesneyi döndürür.

Örnek kod

Aşağıdaki örnekte yatay kaydırma gösterilmektedir. Hız izleyiciden alınan hız velocityX ve kaydırma sınırları 0 ile maxScroll olarak ayarlanır. Sürtünme 1,1 olarak ayarlanmıştır.

Kotlin

FlingAnimation(view, DynamicAnimation.SCROLL_X).apply {
    setStartVelocity(-velocityX)
    setMinValue(0f)
    setMaxValue(maxScroll)
    friction = 1.1f
    start()
}

Java

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
fling.setStartVelocity(-velocityX)
        .setMinValue(0)
        .setMaxValue(maxScroll)
        .setFriction(1.1f)
        .start();

Minimum görünür değişikliği ayarlama

Piksel cinsinden tanımlanmamış bir özel özelliği canlandırdığınızda, kullanıcılara görünür olan animasyon değerinin minimum değişimini ayarlamanız gerekir. Animasyonu sonlandırmak için makul bir eşik belirler.

Minimum görünür değişiklik özellikten türetildiğinden DynamicAnimation.ViewProperty öğesi animasyonlandırılırken bu yöntemin çağrılması gerekmez. Örneğin:

  • Varsayılan minimum görünür değişiklik değeri, TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X ve SCROLL_Y gibi görünüm özelliklerinde 1 pikseldir.
  • ROTATION, ROTATION_X ve ROTATION_Y gibi döndürme kullanan animasyonlarda minimum görünür değişiklik MIN_VISIBLE_CHANGE_ROTATION_DEGREES veya 1/10 pikseldir.
  • Opaklık kullanan animasyonlarda minimum görünür değişiklik MIN_VISIBLE_CHANGE_ALPHA veya 1/256'dır.

Bir animasyon için minimum görünür değişikliği ayarlamak üzere setMinimumVisibleChange() yöntemini çağırın ve minimum görünür sabitlerden birini veya özel bir özellik için hesaplamanız gereken bir değeri iletin. Bu değeri hesaplama hakkında daha fazla bilgi için Minimum görünür değişiklik değerini hesaplama bölümüne bakın.

Kotlin

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

Java

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

Not: Yalnızca piksellerle tanımlanmamış bir özel özelliği animasyonla hareketlendirirken değer iletmeniz gerekir.

Minimum görünür değişiklik değerini hesaplama

Özel bir özelliğin minimum görünür değişiklik değerini hesaplamak için aşağıdaki formülü kullanın:

Minimum görünür değişiklik = Özel özellik değerinin aralığı / Piksel cinsinden animasyon aralığı

Örneğin, animasyon eklemek istediğiniz özellik 0'dan 100'e ilerliyor. Bu, 200 piksellik bir değişikliğe karşılık gelir. Formüle göre, minimum görünür değişiklik değeri 100 / 200 = 0,5 pikseldir.