फ़्लिंग-आधारित ऐनिमेशन, घर्षण बल का इस्तेमाल करता है, जो किसी ऑब्जेक्ट के वेग के हिसाब से होता है. इसका इस्तेमाल किसी ऑब्जेक्ट की प्रॉपर्टी को ऐनिमेट करने और ऐनिमेशन को धीरे-धीरे खत्म करने के लिए करें. इसमें शुरुआती मोमेंटम होता है, जो ज़्यादातर जेस्चर की रफ़्तार से मिलता है. यह धीरे-धीरे धीमा हो जाता है. ऐनिमेशन तब खत्म होता है, जब ऐनिमेशन का वेग इतना कम हो जाता है कि डिवाइस की स्क्रीन पर कोई बदलाव न दिखे.
मिलते-जुलते विषयों के बारे में जानने के लिए, ये गाइड पढ़ें:
AndroidX लाइब्रेरी जोड़ना
फ़िज़िक्स पर आधारित ऐनिमेशन का इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में AndroidX लाइब्रेरी को इस तरह जोड़ना होगा:
- अपने ऐप्लिकेशन मॉड्यूल के लिए
build.gradle
फ़ाइल खोलें. dependencies
सेक्शन में AndroidX लाइब्रेरी जोड़ें.Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
फ़्लिंग ऐनिमेशन बनाना
FlingAnimation
क्लास की मदद से, किसी ऑब्जेक्ट के लिए फ़्लिंग ऐनिमेशन बनाया जा सकता है. फ़्लिंग ऐनिमेशन बनाने के लिए, FlingAnimation
क्लास का एक इंस्टेंस बनाएं और उस ऑब्जेक्ट और ऑब्जेक्ट की प्रॉपर्टी की जानकारी दें जिसे आपको ऐनिमेट करना है.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
वेग सेट करना
शुरुआती वेग से यह तय होता है कि ऐनिमेशन की शुरुआत में, ऐनिमेशन प्रॉपर्टी की स्पीड कितनी बदलेगी. डिफ़ॉल्ट रूप से, शुरू में पिक्सल की रफ़्तार, प्रति सेकंड शून्य पर सेट होती है. इसलिए, आपको ऐनिमेशन शुरू होने की स्पीड तय करनी होगी, ताकि यह पक्का किया जा सके कि ऐनिमेशन तुरंत खत्म न हो.
शुरुआती वेग के तौर पर, किसी तय वैल्यू का इस्तेमाल किया जा सकता है. इसके अलावा, टच जेस्चर के वेग के आधार पर भी शुरुआती वेग तय किया जा सकता है. अगर आपको कोई तय वैल्यू देनी है, तो वैल्यू को हर सेकंड के डीपी में तय करें. इसके बाद, इसे हर सेकंड के पिक्सल में बदलें. हर सेकंड के हिसाब से डीपी में वैल्यू तय करने से, डिवाइस के डेंसिटी और फ़ॉर्म फ़ैक्टर के हिसाब से, वेग तय नहीं किया जा सकता. शुरू में मौजूद वेग को हर सेकंड में पिक्सल में बदलने के बारे में ज़्यादा जानने के लिए, स्प्रिंग ऐनिमेशन में हर सेकंड में डीपी को हर सेकंड में पिक्सल में बदलना सेक्शन देखें.
वेग सेट करने के लिए, setStartVelocity()
तरीके को कॉल करें और वेग को पिक्सल प्रति सेकंड में पास करें. यह तरीका, फ़्लिंग ऑब्जेक्ट दिखाता है, जिस पर वेलोसिटी सेट होती है.
ध्यान दें: टच जेस्चर की स्पीड को पाने और उसका हिसाब लगाने के लिए, GestureDetector.OnGestureListener
और
VelocityTracker
क्लास का इस्तेमाल करें.
ऐनिमेशन की वैल्यू की सीमा सेट करना
अगर आपको प्रॉपर्टी की वैल्यू को किसी तय सीमा में रखना है, तो ऐनिमेशन की कम से कम और ज़्यादा से ज़्यादा वैल्यू सेट की जा सकती है. रेंज कंट्रोल का इस्तेमाल, खास तौर पर तब किया जाता है, जब ऐसी प्रॉपर्टी को ऐनिमेट किया जाता है जिनकी रेंज पहले से तय होती है. जैसे, ऐल्फ़ा (0 से 1).
ध्यान दें: जब फ़्लिंग ऐनिमेशन की वैल्यू, कम से कम या ज़्यादा से ज़्यादा वैल्यू पर पहुंच जाती है, तो ऐनिमेशन खत्म हो जाता है.
कम से कम और ज़्यादा से ज़्यादा वैल्यू सेट करने के लिए, setMinValue()
और setMaxValue()
तरीकों को क्रमशः कॉल करें.
दोनों तरीके, उस ऐनिमेशन ऑब्जेक्ट को दिखाते हैं जिसके लिए आपने वैल्यू सेट की है.
फ़्रिक्शन सेट करना
setFriction()
तरीके से, ऐनिमेशन के फ़्रिक्शन को बदला जा सकता है. इससे यह तय होता है कि ऐनिमेशन में वेग कितनी तेज़ी से कम होता है.
ध्यान दें: अगर आपने ऐनिमेशन की शुरुआत में फ़्रिक्शन की वैल्यू सेट नहीं की है, तो ऐनिमेशन में फ़्रिक्शन की डिफ़ॉल्ट वैल्यू 1 का इस्तेमाल किया जाता है.
यह तरीका उस ऑब्जेक्ट को दिखाता है जिसका ऐनिमेशन, आपके दिए गए घर्षण की वैल्यू का इस्तेमाल करता है.
नमूना कोड
नीचे दिए गए उदाहरण में, हॉरिज़ॉन्टल फ़्लिंग को दिखाया गया है. वेग ट्रैकर से कैप्चर किया गया वेग velocityX
है और स्क्रोल बाउंड 0 और
maxScroll पर सेट हैं. फ़्रिक्शन 1.1 पर सेट है.
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();
बदलाव को कम से कम दिखाने के लिए सेट करें
जब किसी ऐसी कस्टम प्रॉपर्टी को ऐनिमेट किया जाता है जिसे पिक्सल में तय नहीं किया गया है, तो आपको ऐनिमेशन की वैल्यू में ऐसा बदलाव करना चाहिए जो उपयोगकर्ताओं को दिखे. यह ऐनिमेशन खत्म करने के लिए एक सही थ्रेशोल्ड तय करता है.
DynamicAnimation.ViewProperty
को ऐनिमेट करते समय, इस तरीके को कॉल करना ज़रूरी नहीं है, क्योंकि दिखने वाला कम से कम बदलाव प्रॉपर्टी से लिया जाता है. उदाहरण के लिए:
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
, औरSCROLL_Y
जैसी व्यू प्रॉपर्टी के लिए, बदलाव की डिफ़ॉल्ट कम से कम वैल्यू 1 पिक्सल होती है.ROTATION
,ROTATION_X
, औरROTATION_Y
जैसे ऐनिमेशन में रोटेशन का इस्तेमाल किया जाता है. इनमें दिखने वाला कम से कम बदलावMIN_VISIBLE_CHANGE_ROTATION_DEGREES
या 1/10 पिक्सल होता है.- ओपैसिटी का इस्तेमाल करने वाले ऐनिमेशन के लिए, दिखने वाला कम से कम बदलाव
MIN_VISIBLE_CHANGE_ALPHA
या 1/256 होता है.
किसी ऐनिमेशन के लिए, दिखने वाले बदलाव की कम से कम वैल्यू सेट करने के लिए,
setMinimumVisibleChange()
तरीका कॉल करें और दिखने वाली कम से कम वैल्यू में से किसी एक को या फिर ऐसी वैल्यू को पास करें जिसका आपको कस्टम प्रॉपर्टी के लिए हिसाब लगाना है. इस वैल्यू का हिसाब लगाने के बारे में ज़्यादा जानने के लिए,
कम से कम दिखने वाले बदलाव की वैल्यू का हिसाब लगाना
सेक्शन देखें.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
ध्यान दें: आपको सिर्फ़ तब वैल्यू पास करनी होगी, जब किसी ऐसी कस्टम प्रॉपर्टी को ऐनिमेट किया जाए जो पिक्सल में तय नहीं की गई है.
बदलाव की कम से कम दिखने वाली वैल्यू का हिसाब लगाना
कस्टम प्रॉपर्टी के लिए, दिखने वाले बदलाव की कम से कम वैल्यू का हिसाब लगाने के लिए, इस फ़ॉर्मूला का इस्तेमाल करें:
दिखने वाला कम से कम बदलाव = कस्टम प्रॉपर्टी वैल्यू की रेंज / पिक्सल में ऐनिमेशन की रेंज
उदाहरण के लिए, आपको जिस प्रॉपर्टी को ऐनिमेट करना है वह 0 से 100 तक बढ़ती है. इसका मतलब है कि 200 पिक्सल का बदलाव हुआ है. फ़ॉर्मूला के मुताबिक, दिखने वाले बदलाव की कम से कम वैल्यू 100 / 200, यानी 0.5 पिक्सल है.