我想爲JPanel設置一個動畫漸變背景。效果起作用,但我希望在重新開始時順利過渡。以下是我目前的實施。當xvalue2達到極限集時,我交換顏色並重新開始。平滑漸變背景動畫java
public class GradientAnimation {
static class GradientPanel extends JPanel {
private static final long serialVersionUID = -4185583782901846967L;
private Timer timer;
private float Xend;
private final float MAXVALUE = 800f;
private Color color1 = new Color(128,62,153,255);
private Color color2 = new Color(192,201,200,255);
GradientPanel() {
Xend = 0f;
setOpaque(true);
ActionListener action = new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
if (Xend < MAXVALUE) Xend+=2f;
else{
Color aux = color1;
color1 = color2;
color2 = aux;
Xend = 0f;
}
revalidate();
repaint();
}
};
timer = new Timer(5, action);
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
final BufferedImage image = new BufferedImage(
getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
g2d = image.createGraphics();
GradientPaint prim = new GradientPaint(0f, 0f, color1,
Xend, 0f, color2);
g2d.setPaint(prim);
g2d.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(image, 0, 0, null);
}
}
private static void createAndShowUI() {
try {
JFrame frame = new JFrame("Gradient Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
GradientPanel imagePanel = new GradientPanel();
frame.add(imagePanel);
frame.setSize(400, 400);
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
再一次,我想隱藏一段時間,我交換顏色有一個完美的梯度動畫循環。如果代碼看起來正確,請告訴我,我如何提高質量。
請不要爲填料張貼廢話作爲擊敗限制的目的,而不是玩公平與我們的志願者誰還會幫你。相反,請告訴你的問題的細節,代碼的作用,它應該做什麼。 –
是的,我明白了。但是與代碼相比,我的解釋太短了,我想發佈一個工作代碼而不是代碼片段,因此可以對其進行測試。抱歉。 –
因此,添加更多的解釋,而不是廢話。幫助我們理解你寫的代碼,描述它。再一次,你的幫助我們只會幫助你。 –