यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
किसी कंपोनेंट को उसकी स्थिति एनिमेट करके कैसे हिलाएँ
उद्देश्य. किसी कंपोनेंट की पिक्सेल में स्थिति को एनिमेट करना (जैसे: एक कार्ड को दाईं ओर से केंद्र की ओर सरकाना)। PositionAnimation रैखिक रूप से इंटरपोलेट करता है और [0,1] में क्लैंप नहीं किया जाता — निर्देशांकों के लिए आदर्श।
उपयोग किए गए APIs
new PositionAnimation(float start, float end, float duration [, float fps])—start → endको रैखिक रूप से इंटरपोलेट करता है, बिना क्लैंप के;durationसेकंड में;fpsवैकल्पिक (डिफ़ॉल्ट 60)।PositionAnimation.onUpdate(Runnable)/onComplete(Runnable)/getValue()/start()/stop()/cancel()—AlphaAnimationका ही परिवार।Component.setX(int)/Component.setY(int)— कंपोनेंट को पुनः स्थापित करते हैं (Componentलौटाते हैं)। विकल्प: जब आकार भी बदलना हो तबsetBounds(int x, int y, int w, int h)।Component.getY()/getWidth()/getHeight()— उन अक्षों को संरक्षित करने के लिए जो एनिमेट नहीं हो रहे।Component.repaint()— स्टैटिक;onUpdateमें अनिवार्य (माँग पर रेंडर)।
पूरा उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.animation.*;
/** चलाने योग्य मुख्य स्क्रीन: खुलने पर एक card को दाएँ से केंद्र में सरकाती है। */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
Card card = new Card();
add(card);
int fromX = Screen.width; // स्क्रीन के बाहर, दाईं ओर से शुरू होता है
int toX = (Screen.width - card.width) / 2; // क्षैतिज रूप से केंद्रित करता है
PositionAnimation slide = new PositionAnimation(fromX, toX, 0.4f); // 400 ms
slide.onUpdate(() ->
{
card.x = (int) slide.getValue(); // केवल X अक्ष हिलाता है; Y बना रहता है (x एक public फ़ील्ड है)
Component.repaint(); // इसके बिना frame फिर से नहीं बनता
})
.onComplete(() -> Component.repaint())
.start();
}
}
नीचे दिया गया अंश केवल मुख्य भाग दिखाता है। इसे चलाने के लिए, इसे ऊपर दिए गए
MainWindowकंकाल में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: PositionAnimation linear बिना clamp; Component.setX(int)/setY(int); repaint() static
Card card = new Card();
add(card);
int fromX = Screen.width; // स्क्रीन के बाहर, दाईं ओर से शुरू होता है
int toX = (Screen.width - card.getWidth()) / 2; // क्षैतिज रूप से केंद्रित करता है
PositionAnimation slide = new PositionAnimation(fromX, toX, 0.4f); // 400 ms
slide.onUpdate(() ->
{
card.setX((int) slide.getValue()); // केवल X अक्ष हिलाता है; Y बना रहता है
Component.repaint(); // इसके बिना frame फिर से नहीं बनता
})
.onComplete(() -> Component.repaint())
.start();
विवरण:
- यदि आपको X और Y दोनों को एक साथ हिलाना हो, तो दो
PositionAnimationउपयोग करें (प्रति अक्ष एक) याonUpdateमें दोनों की गणना करते हुएsetBounds(x, y, w, h)लागू करें। setX/setYपैरेंट में निरपेक्ष स्थिति बदलते हैं; स्वचालित लेआउट वाली स्क्रीनों में, ऐसे कंपोनेंट्स को एनिमेट करना पसंद करें जिनके bounds को आप सीधे नियंत्रित करते हैं (Layoutसे लड़ने से बचें)।AlphaAnimationके विपरीत, यहाँ कोई easing नहीं है: गति स्थिर रहती है। सहज गति के लिए, अपने स्वयं के फ़ंक्शन में एक easing चेन करें या ओपेसिटी इफ़ेक्ट के लिएAlphaAnimationके साथ मिलाएँ।
और गहराई से जानें
- वैल्यू एनिमेशन
- संबंधित रेसिपी: किसी कंपोनेंट का Fade · लूप में पल्स
- संबंधित: स्क्रीन खोलना और बंद करना
क्या यह पृष्ठ उपयोगी था?प्रतिक्रिया के लिए धन्यवाद!