2012-05-22 2 views
1

Мне нужен один пример затухания цвета, который написан на Java. Мое требование: у меня есть два прямоугольника. Один заполнен красным цветом, а другой заполнен белым. Когда я нажимаю любую кнопку, я хочу, чтобы красный цвет начал исчезать и перемещаться зеленым цветом. Как только он будет достигнут зеленого положения, тогда автоматически другой прямоугольник должен начинаться с желтого синего. Может ли кто-нибудь помочь мне в этом? Если какой-либо пример получил, который написан в Javaswing или SWT, будет хорошо. Благодарю.выцветание образца

+0

Я попробовал один выцветания, не satisy мое требование. Это уменьшало красный цвет до белого, используя альфу. – user414967

ответ

3

Оформить заказ Trident анимационная библиотека. Это позволяет легко интерполировать свойства в вашем классе. Также проверьте these оригинальные учебники Кирилла Гроучникова (автора Trident).

EDIT: пример анимации без Trident

Следующий пример основан на примере AnimatedGraphics в Filthy Rich Clients:

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 

public class AnimatedGraphics extends JComponent implements ActionListener { 

    Color startColor = Color.RED; // where we start 
    Color endColor = Color.GREEN;   // where we end 
    Color currentColor = startColor; 
    int animationDuration = 2000; // each animation will take 2 seconds 
    long animStartTime;   // start time for each animation 

    public AnimatedGraphics() { 
     Timer timer = new Timer(30, this); 
     // initial delay while window gets set up 
     timer.setInitialDelay(1000); 
     animStartTime = 1000 + System.nanoTime()/1000000; 
     timer.start(); 
    } 

    public void paintComponent(Graphics g) { 
     g.setColor(getBackground()); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     g.setColor(currentColor); 
     g.fillOval(0, 0, getWidth(), getHeight()); 
    } 

    public void actionPerformed(ActionEvent ae) { 
     // calculate elapsed fraction of animation 
     long currentTime = System.nanoTime()/1000000; 
     long totalTime = currentTime - animStartTime; 
     if (totalTime > animationDuration) { 
      animStartTime = currentTime; 
     } 
     float fraction = (float)totalTime/animationDuration; 
     fraction = Math.min(1.0f, fraction); 
     // interpolate between start and end colors with current fraction 
     int red = (int)(fraction * endColor.getRed() + 
       (1 - fraction) * startColor.getRed()); 
     int green = (int)(fraction * endColor.getGreen() + 
       (1 - fraction) * startColor.getGreen()); 
     int blue = (int)(fraction * endColor.getBlue() + 
       (1 - fraction) * startColor.getBlue()); 
     // set our new color appropriately 
     currentColor = new Color(red, green, blue); 
     // force a repaint to display our oval with its new color 
     repaint(); 
    } 

    private static void createAndShowGUI() {  
     JFrame f = new JFrame("Animated Graphics"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(200, 200); 
     f.add(new AnimatedGraphics()); 
     f.setVisible(true); 
    } 

    public static void main(String args[]) { 
     Runnable doCreateAndShowGUI = new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }; 
     SwingUtilities.invokeLater(doCreateAndShowGUI); 
    } 
} 
+0

Хорошо. Благодарю. Но я не знаю, можем ли мы добавить эту библиотеку в наш проект. Anywyas спасибо. – user414967

+0

@ user414967 Я включил образец, который оживляет переход цвета без Trident. – tenorsax

+0

Большое спасибо сэру !!! Очень полезно !!! – user414967

Смежные вопросы