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

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

Kaydırmaya dayalı 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 bu işlevi kullanın. Başlangıçta, çoğunlukla hareket hızından alınan bir momentumu vardır ve 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.

Şekil 1. Fling animasyonu

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

AndroidX kitaplığını ekleme

Fizik tabanlı animasyonları kullanmak için AndroidX kitaplığını projenize aşağıdaki gibi 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.

    Modern

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

    Kotlin

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

Kaydırma animasyonu oluşturma

FlingAnimation sınıfı, bir nesne için kaydırma animasyonu oluşturmanıza olanak tanır. Kaydırma animasyonu oluşturmak için FlingAnimation sınıfının bir örneğini oluşturun ve animasyon eklemek istediğiniz nesneyi ve nesnenin ö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ı, bir animasyon özelliğinin animasyonun başında değişme hızını tanımlar. Varsayılan başlangıç hızı saniyede sıfır piksel olarak ayarlanmıştır. Bu nedenle, animasyonun hemen bitmemesi için bir başlangıç hızı tanımlamanız gerekir.

Başlangıç hızı olarak sabit bir değer kullanabilir veya hızı dokunma hareketinin hızına göre belirleyebilirsiniz. Sabit bir değer sağlamayı seçerseniz değeri saniye başına dp cinsinden tanımlamanız ve ardından saniye başına piksel cinsine dönüştürmeniz gerekir. Değeri saniye başına dp cinsinden tanımlamak, hızın cihazın yoğunluğundan ve form faktörlerinden bağımsız olmasını sağlar. Başlangıç hızını saniye başına piksel değerine dönüştürme hakkında daha fazla bilgi için Yay Animasyonu bölümündeki Saniye başına dp değerini saniye başına piksel değerine dönüştürme bölümüne bakın.

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ı almak ve hesaplamak için sırasıyla 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 kontrolü, özellikle alfa (0 ile 1 arasında) gibi iç aralığı olan özellikleri canlandırırken kullanışlıdır.

Not: Bir kaydırma 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ğerini 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 animasyon, varsayılan sürtünme değeri olan 1'i kullanır.

Yöntem, animasyonu sağladığınız sürtünme değerini kullanan nesneyi döndürür.

Örnek kod

Aşağıdaki örnekte yatay bir kaydırma hareketi gösterilmektedir. Hız izleyiciden yakalanan hız velocityX ve kaydırma sınırları 0 ile maxScroll olarak ayarlanmış. Sürtünme 1,1 olarak ayarlandı.

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ış özel bir özelliğe animasyon uygularken, animasyon değerinin kullanıcılar tarafından görülebilen minimum değişimini ayarlamanız gerekir. Animasyonu sonlandırmak için makul bir eşik belirler.

DynamicAnimation.ViewProperty animasyonu oluşturulurken bu yöntemi çağırmak gerekmez çünkü minimum görünür değişiklik, özellikten türetilir. Örneğin:

  • TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X ve SCROLL_Y gibi görünüm özellikleri için varsayılan minimum görünür değişiklik değeri 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 ya da özel bir özellik için hesaplamanız gereken bir değeri iletin. Bu değerin hesaplanması 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 piksel cinsinden tanımlanmamış özel bir özelliğe animasyon uygularken değer iletmeniz gerekir.

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

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

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

Örneğin, animasyon eklemek istediğiniz özellik 0'dan 100'e ilerler. 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'dür ve 0,5 piksele eşittir.