यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
मान एनिमेशन
तीनों एनिमेटर समय के साथ एक संख्या को इंटरपोलेट करते हैं। वे कुछ भी नहीं बनाते: onUpdate में
आप getValue() पढ़ते हैं और उसे जहाँ चाहें लागू करते हैं (alpha, स्थिति, रंग…)। चूँकि रेंडर माँग पर होता है,
कॉलबैक में Component.repaint() कॉल करें।
तुलना
| क्लास | परास (range) | वक्र | दोहराता है? | किसके लिए उपयोग करें |
|---|---|---|---|---|
AlphaAnimation |
[0,1] | ease-in-out घन (cubic) | नहीं (onComplete है) |
फ़ेड, अपारदर्शिता, हाइलाइट |
PositionAnimation |
मुक्त | रैखिक | नहीं (onComplete है) |
पिक्सेल में स्थानांतरण, स्लाइड |
LoopAnimation |
[0,1] | रैखिक या eased | हाँ, अनंत | पल्स, ग्लो, लोडिंग |
पूरा उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.animation.*; // AlphaAnimation, PositionAnimation, LoopAnimation
import dev.crossfly.util.*; // Debug
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// AlphaAnimation — एक लेबल का fade-in (0.3s में 0→1)
Label card = new Label("Olá");
add(LAY_AUTO, card);
AlphaAnimation fade = new AlphaAnimation(0f, 1f, 0.3f);
fade.onUpdate(() -> { card.alpha(fade.getValue()); Component.repaint(); })
.onComplete(() -> Debug.log("fade concluído"))
.start();
// PositionAnimation — दाईं ओर से आते हुए पैनल को स्लाइड करता है (पिक्सेल में, मुक्त)
Label painel = new Label("Painel");
add(LAY_AUTO, painel);
int y0 = painel.y, w = painel.width, h = painel.height;
PositionAnimation slide = new PositionAnimation(Screen.width, 0, 0.4f);
slide.onUpdate(() -> { painel.setBounds((int) slide.getValue(), y0, w, h); Component.repaint(); })
.start();
// LoopAnimation — अपारदर्शिता का सतत स्पंदन (1s चक्र, सुगम, अनंत)
Label ponto = new Label("●");
add(LAY_AUTO, ponto);
LoopAnimation pulse = new LoopAnimation(1.0f, 60f, true);
pulse.onUpdate(() -> { ponto.alpha(0.4f + 0.6f * pulse.getValue()); Component.repaint(); })
.start();
}
}
नीचे दिए गए स्निपेट सिर्फ़ मूल भाग दिखाते हैं (जो
onShow()के अंदर जाता है)। चलाने के लिए, इन्हें ऊपर वालेMainWindowकंकाल में रखें।
AlphaAnimation — fade-in
Label card = new Label("Olá");
AlphaAnimation fade = new AlphaAnimation(0f, 1f, 0.3f); // 0.3s में 0→1
fade.onUpdate(() -> { card.alpha(fade.getValue()); Component.repaint(); })
.onComplete(() -> Debug.log("fade concluído"))
.start();
कंस्ट्रक्टर: AlphaAnimation(start, end, duration) (60 FPS) या (start, end, duration, fps)।
PositionAnimation — किसी पैनल को स्लाइड करना (पिक्सेल में)
int y0 = painel.y, w = painel.width, h = painel.height;
PositionAnimation slide = new PositionAnimation(Screen.width, 0, 0.4f); // दाईं ओर से आता है
slide.onUpdate(() -> { painel.setBounds((int) slide.getValue(), y0, w, h); Component.repaint(); })
.start();
यह [0,1] तक सीमित नहीं है और रैखिक है — निर्देशांक के लिए आदर्श।
LoopAnimation — निरंतर पल्स
LoopAnimation pulse = new LoopAnimation(1.0f, 60f, true); // 1s चक्र, 60 FPS, सुगम
pulse.onUpdate(() -> { float v = 0.4f + 0.6f * pulse.getValue(); ponto.alpha(v); Component.repaint(); })
.start();
// pulse.stop(); // स्क्रीन से निकलते समय रोकें
कंस्ट्रक्टर: LoopAnimation(duration) (रैखिक, 60 FPS) या (duration, fps, easeInOut)। इसमें
onComplete नहीं है (stop() तक हमेशा चलता है)।
सामान्य नियंत्रण
start() · stop() (Alpha/Position में onComplete ट्रिगर करता है) · cancel() (ट्रिगर नहीं करता) ·
isRunning() · getValue()।
सर्वोत्तम अभ्यास
onUpdateमें हमेशाComponent.repaint()— रेंडर माँग पर होता है।- स्क्रीन से बाहर जाते समय (
onRemove()में) लूप रोकें (stop()), नहीं तोTimerचलता रहेगा। - बाद में
stop()/cancel()कर पाने के लिए एनिमेशन को किसी वेरिएबल/फ़ील्ड में रखें।
आम गलतियाँ
PositionAnimationको [0,1] परास की अपेक्षा में उपयोग करना — यह मुक्त है; क्लैंपAlphaAnimationकरता है।repaint()भूल जाना और “एनिमेशन दिखता नहीं”।setAlpha(...)कॉल करना (पुराने Javadoc से) — वास्तविक विधिalpha(float)है।