मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

किसी कंपोनेंट को उसकी स्थिति एनिमेट करके कैसे हिलाएँ

उद्देश्य. किसी कंपोनेंट की पिक्सेल में स्थिति को एनिमेट करना (जैसे: एक कार्ड को दाईं ओर से केंद्र की ओर सरकाना)। 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 के साथ मिलाएँ।

और गहराई से जानें

क्या यह पृष्ठ उपयोगी था?