फ़्लिंग-आधारित ऐनिमेशन में, फ़्रिक्शन फ़ोर्स का इस्तेमाल किया जाता है. यह फ़ोर्स, ऑब्जेक्ट की रफ़्तार के हिसाब से होता है. इसका इस्तेमाल, किसी ऑब्जेक्ट की प्रॉपर्टी को ऐनिमेट करने और ऐनिमेशन को धीरे-धीरे खत्म करने के लिए किया जाता है. इसमें शुरुआती मोमेंटम होता है, जो ज़्यादातर जेस्चर की रफ़्तार से मिलता है. यह धीरे-धीरे कम होता जाता है. ऐनिमेशन तब रुकता है, जब उसकी रफ़्तार इतनी कम हो जाती है कि डिवाइस की स्क्रीन पर कोई बदलाव नहीं दिखता.
मिलते-जुलते विषयों के बारे में जानने के लिए, ये गाइड पढ़ें:
AndroidX लाइब्रेरी जोड़ना
फ़िज़िक्स पर आधारित ऐनिमेशन इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में AndroidX लाइब्रेरी जोड़नी होगी. इसके लिए, यह तरीका अपनाएं:
- अपने ऐप्लिकेशन मॉड्यूल के लिए,
build.gradleफ़ाइल खोलें. - AndroidX लाइब्रेरी को
dependenciesसेक्शन में जोड़ें.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जैसी व्यू प्रॉपर्टी के लिए, दिखने वाले बदलाव की डिफ़ॉल्ट कम से कम वैल्यू एक पिक्सल होती है.- रोटेशन का इस्तेमाल करने वाले ऐनिमेशन के लिए, जैसे कि
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 पिक्सल के बराबर है.