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

"Oluştur" 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.

Kaydırmaya dayalı 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 sonlandırmak için bunu kullanın. Çoğunlukla hareket hızından alınan bir başlangıç momentumuna sahiptir ve kademeli olarak yavaşlar. Animasyonun hızı, cihaz ekranında görünür herhangi bir değişiklik yapılmayacak 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

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

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

    Eski

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

    Kotlin

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

Hızlı kaydırma animasyonu oluştur

FlingAnimation sınıfı, bir nesne için hızla kaydırma animasyonu oluşturmanıza olanak tanır. Hızlıca kaydırma animasyonu oluşturmak için FlingAnimation sınıfının bir örneğini oluşturun ve canlandırmak istediğiniz nesne ile 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ı ayarlayın

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. Dolayısıyla, 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 bunu bir dokunma hareketinin hızına dayandırabilirsiniz. Sabit bir değer sağlamayı seçerseniz değeri dp/saniye cinsinden tanımlamalı ve ardından saniyedeki 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ı saniye başına piksele dönüştürme hakkında daha fazla bilgi için İlkbahar Animasyonu'ndaki Saniyedeki dp değerini saniyedeki piksele dönüştürme bölümüne bakın.

Hızı ayarlamak için setStartVelocity() yöntemini çağırın ve hızı saniye başına piksel cinsinden iletin. Yöntem, hızın ayarlandığı hızlı 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ğ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 kontrolü, alfa gibi (0 ile 1 arasında) gibi içsel bir aralığa sahip özellikler canlandırıldığında özellikle faydalıdır.

Not: Bir hızla 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ı ayarlayın

setFriction() yöntemi, animasyondaki pürüzleri değiştirmenize olanak tanır. Bir animasyonda hızın ne kadar hızlı düştüğünü tanımlar.

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

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

Örnek kod

Aşağıdaki örnekte yatay bir kaydırma gösterilmektedir. Hız izleyiciden yakalanan hız velocityX olup kaydırma sınırları 0 ve max Scroll olarak ayarlanmıştır. Çakışma, 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 belirleme

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

Görünür minimum değişiklik mülkten elde edildiği için DynamicAnimation.ViewProperty canlandırması yapılırken bu yöntemi çağırmak gerekli değildir. Ö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ürmeyi kullanan animasyonlar için görüntülenebilir minimum değişiklik MIN_VISIBLE_CHANGE_ROTATION_DEGREES veya 1/10 pikseldir.
  • Opaklık kullanan animasyonlar için görüntülenebilir minimum değişiklik MIN_VISIBLE_CHANGE_ALPHA veya 1/256'dır.

Bir animasyonda görülebilecek minimum 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 özellik için hesaplamanız gereken bir değeri iletin. Bu değeri hesaplama hakkında daha fazla bilgi için Görünür minimum 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 bir özel ö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 mülk değerinin aralığı / Piksel cinsinden animasyon aralığı

Örneğin, animasyon eklemek istediğiniz özellik 0'dan 100'e doğru ilerler. Bu, 200 piksellik bir değişime 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.