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

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Oluşturma bölümünde animasyon özelliğini nasıl kullanacağınızı öğrenin.

Atma tabanlı animasyon, nesnenin hızına orantılı bir sürtünme kuvveti kullanır. Bir nesnenin özelliğini animasyonlu hale getirmek ve animasyonu kademeli olarak sonlandırmak için kullanın. Başlangıçta, çoğunlukla hareket hızından alınan bir momentuma sahiptir 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. Fırlatma 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.

    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 fırlatma animasyonu oluşturmanıza olanak tanır. Bir fırlatma animasyonu oluşturmak için FlingAnimation sınıfının bir örneğini oluşturun ve animasyon oluşturmak 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şındaki hızını tanımlar. Varsayılan başlangıç hızı saniyede sıfır piksel olarak ayarlanmıştır. Bu nedenle, animasyonun hemen bitmediğinden emin olmak için bir başlangıç hızı tanımlamanız gerekir.

Başlangıç hızı olarak sabit bir değer kullanabilir veya dokunma hareketinin hızını temel alabilirsiniz. Sabit bir değer belirtmeyi seçerseniz değeri saniye başına dp cinsinden tanımlamanız ve ardından saniye başına piksel cinsinden 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 piksele dönüştürme hakkında daha fazla bilgi için Yaylı Animasyon bölümündeki Saniye başına dp'yi saniye başına 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ığı fırlatma nesnesini döndürür.

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

Animasyon değeri aralığı ayarlama

Mülk değerini belirli bir aralıkta kısıtlamak 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 animasyonlu hale getirirken kullanışlıdır.

Not: Bir 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ğerini belirlediğiniz animasyon nesnesini döndürür.

Zorluk ayarla

setFriction() yöntemi, animasyondaki sürtünmeyi değiştirmenize olanak tanır. Bir animasyonda hızın ne kadar hızlı azaldığını tanımlar.

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

Yöntem, animasyonunda belirttiğiniz sürtünme değerini kullanan nesneyi döndürür.

Örnek kod

Aşağıdaki örnekte yatay bir fırlatma gösterilmektedir. Hız izleyiciden yakalanan hız velocityX'tür ve kaydırma sınırları 0 ve 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ımlanmayan bir özel mülkü animasyona dönüştürdüğünüzde, kullanıcıların görebileceği minimum animasyon değeri değişikliğini ayarlamanız gerekir. Animasyonun sonlandırılması için makul bir eşik belirler.

Minimum görünür değişiklik mülkten türetildiği için DynamicAnimation.ViewProperty öğesini animasyonlu hale getirirken bu yöntemi çağırmanız gerekmez. Örnek:

  • TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X ve SCROLL_Y gibi görüntüleme özellikleri için varsayılan minimum görünür değişiklik değeri 1 pikseldir.
  • ROTATION, ROTATION_X ve ROTATION_Y gibi rotasyon kullanan animasyonlarda, görünür en az değişiklik MIN_VISIBLE_CHANGE_ROTATION_DEGREES veya 1/10 pikseldir.
  • Opaklığı kullanan animasyonlarda minimum görünür değişiklik MIN_VISIBLE_CHANGE_ALPHA veya 1/256'tı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 mülk 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ış bir özel mülkü animasyona aldığınızda değer göndermeniz 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 mülk değerinin aralığı / piksel cinsinden animasyon aralığı

Örneğin, animasyon oluşturmak istediğiniz mülk 0'dan 100'e doğru ilerler. Bu, 200 piksellik bir değişikliğe karşılık gelir. Formül uyarınca, minimum görünen değişiklik değeri 100 / 200'dir ve 0,5 piksele eşittir.