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

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

Kaydırma tabanlı animasyonda, nesnenin hızıyla orantılı bir sürtünme kuvveti kullanılır. Bir nesnenin özelliğini canlandırmak ve animasyonu kademeli olarak sona erdirmek için bunu kullanın. Çoğunlukla hareket hızından alınan ve kademeli olarak yavaşlayan bir başlangıç momentumu vardır. Animasyonun hızı, cihaz ekranında gözle görülür bir değişiklik olmayacak kadar düşük olduğunda animasyon sona erer.

Şekil 1. Kaydırma animasyonu

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

AndroidX kitaplığını ekleme

Fiziğe dayalı 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.

    Modern

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

    Kotlin

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

Hızlıca kaydırma animasyonu oluşturun

FlingAnimation sınıfı, bir nesne için hızla kaydırma animasyonu oluşturabilmenizi sağlar. Hızlı kaydırma animasyonu oluşturmak için FlingAnimation sınıfının bir örneğini oluşturup canlandırmak istediğiniz bir 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ı ayarla

Başlangıç hızı, animasyonun başında animasyon özelliğinin değişme hızını tanımlar. Varsayılan başlangıç hızı, saniyede sıfır piksel olarak ayarlanmıştır. Dolayısıyla, animasyonun hemen bitmemesini sağlamak için bir başlangıç hızı tanımlamanız gerekir.

Başlangıç hızı olarak sabit bir değer kullanabilir veya bunu bir dokunma hareketinin hızına dayandırabilirsiniz. Sabit bir değer sağlamayı seçerseniz değeri saniye başına dp cinsinden tanımlamanız ve ardından saniyede piksel sayısına dönüştürmeniz gerekir. Değeri dp/saniye 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ı saniyedeki piksele dönüştürme hakkında daha fazla bilgi için İlkbahar Animasyonu'nun Saniyedeki dp'yi piksel/saniyeye dönüştürme bölümüne bakın.

Hızı ayarlamak için setStartVelocity() yöntemini çağırın ve hızı piksel/saniye cinsinden iletin. Yöntem, hızın ayarlandığı savurma 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ğer 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'dan 1'e) gibi içsel bir aralığa sahip özellikleri canlandırdığınızda kullanışlıdır.

Not: Bir hızlı 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.

Zorlukları belirleyin

setFriction() yöntemi, animasyonun akıcılığını değiştirebilmenizi sağlar. Bir animasyondaki hızın ne kadar hızlı azaldığını tanımlar.

Not: Zorluğu animasyonun başında ayarlamazsanız animasyon, 1 olan varsayılan geçiş değerini kullanır.

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

Örnek kod

Aşağıdaki örnekte yatay bir kaydırma gösterilmektedir. Hız izleyiciden yakalanan hız velocityX. Kaydırma sınırları ise 0 ve maxKaydırma olarak ayarlanmıştır. Kolaylık 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 ayarlayın

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

Minimum görünür değişiklik mülkten türetildiği için DynamicAnimation.ViewProperty animasyonunu oluştururken bu yöntemi çağırmak gerekmez. Örnek:

  • 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 animasyonlar için minimum görünür değişiklik MIN_VISIBLE_CHANGE_ROTATION_DEGREES veya 1/10 pikseldir.
  • Opaklık kullanan animasyonlar için minimum görünür değişiklik MIN_VISIBLE_CHANGE_ALPHA veya 1/256'dır.

Bir animasyonda minimum görünür değişikliği ayarlamak için setMinimumVisibleChange() yöntemini çağırın ve minimum görünür sabit değerlerden birini veya özel bir mülk için hesaplamanız gereken bir değeri iletin. Bu değeri hesaplamayla ilgili 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ımlanmayan özel bir özelliği canlandırdığınızda değer iletmeniz gerekir.

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

Bir özel mülkün 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ğeri aralığı / Piksel cinsinden animasyon aralığı

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