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ı nasıl kullanacağınızı öğrenin.

Kayışa dayalı animasyonda, 30/50 ile orantılı bir sürtünme kuvveti hareket etmesi gerekir. Bunu, bir nesnenin özelliğini animasyon oluşturmak ve animasyonu kademeli olarak sonlandırmak için. Başlangıçtaki hareketliliği çoğunlukla hareket hızından alınır ve yavaş yavaş yavaşlar. İlgili içeriği oluşturmak için kullanılan Animasyonun hızı yeterince düşük olduğunda animasyon sona erer cihaz ekranında görünür hiçbir değişiklik yapmadığından emin olun.

Ş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ıyla içerik oluşturabilirsiniz. hızlıca kaydırma animasyonu oluşturabilirsiniz. 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 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ı ayarlayın

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 ya da başlangıç hızı olarak bir dokunma hareketinin hızıyla ilgili fikir sunar. Sabit bir değer sağlamayı seçerseniz değeri saniye başına dp olarak tanımlamalı ve ardından piksele dönüştürmelisiniz / saniye başına 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ızlı bir şekilde kaydırma nesnesini Sprint değerini alır.

Not: GestureDetector.OnGestureListener ve Alınacak ve hesaplanacak VelocityTracker sınıf sırasıyla dokunma hareketlerinin hızı.

Animasyon değeri aralığı ayarlama

İstediğiniz zaman minimum ve maksimum animasyon değerlerini belirleyebilirsiniz. özellik değerini belirli bir aralıkla sınırlayın. Bu aralık denetimi özellikle içsel bir etkiye sahip özellikler , alfa gibi bir aralık (0'dan 1'e).

Not: Bir fling animasyonunun değeri minimum veya maksimum değere döndüğünde 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.

Zorluk ayarla

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

Not: Fırsatın başlangıcında herhangi bir çakışmayı animasyonda, 1'lik bir varsayılan gecikme değeri kullanılır.

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. Ç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ımlanmayan bir özel mülkü animasyonlu hale getirirken, kullanıcıların görebileceği animasyon değerinin minimum değişimini ayarlamanız gerekir. Google 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 öğesini animasyonlu hale getirirken bu yöntemi çağırmak gerekmez. Örnek:

  • Varsayılan minimum görünür değişiklik değeri, görüntüleme için 1 pikseldir TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X ve SCROLL_Y.
  • 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

Bir özel mülkün minimum görünür değişiklik değerini hesaplamak için şu formülle başlayalım:

Minimum görünür değişiklik = Özel mülk değerinin aralığı / Şunların aralığı piksel cinsinden animasyon

Örneğin, animasyon oluşturmak istediğiniz mülk 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.