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.
İ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:
- Uygulama modülünüzün
build.gradle
dosyasını açın. - 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
veSCROLL_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
veROTATION_Y
gibi döndürme kullanan animasyonlar için minimum görünür değişiklikMIN_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.