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. 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 herhangi bir değişiklik yapılmayacak kadar düşük olduğunda animasyon sona erer.
İ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:
- Uygulama modülünüz için
build.gradle
dosyasını açın. - 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ızlı kaydırma animasyonu oluştur
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şı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 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
Özellik değerini belirli bir aralıkta kısıtlamak 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 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 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: 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 ayarlanmıştı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.
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
veSCROLL_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
veROTATION_Y
gibi rotasyon kullanan animasyonlarda minimum görünür değişiklikMIN_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ğ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 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ş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.