import javax.swing.*;
import java.awt.*;
import java.awt.geom.Path2D;

public class HeartAnimation extends JPanel implements Runnable {
    private double angle = 0;

    public HeartAnimation() {
        setBackground(Color.BLACK);
        new Thread(this).start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        int width = getWidth();
        int height = getHeight();

        int size = Math.min(width, height) / 2;
        int xCenter = width / 2;
        int yCenter = height / 2;

        // Create a gradient for the heart
        GradientPaint gradient = new GradientPaint(
                0, 0, Color.PINK,
                width, height, Color.MAGENTA, true
        );
        g2d.setPaint(gradient);

        // Draw the heart shape
        Path2D.Double heart = new Path2D.Double();
        heart.moveTo(xCenter, yCenter - size / 3);
        heart.curveTo(xCenter + size / 2, yCenter - size, xCenter + size * 1.5, yCenter + size / 3, xCenter, yCenter + size);
        heart.curveTo(xCenter - size * 1.5, yCenter + size / 3, xCenter - size / 2, yCenter - size, xCenter, yCenter - size / 3);
        g2d.fill(heart);

        // Rotate the heart
        g2d.translate(xCenter, yCenter);
        g2d.rotate(angle);
        g2d.translate(-xCenter, -yCenter);
    }

    @Override
    public void run() {
        while (true) {
            angle += Math.PI / 180; // Rotate by 1 degree
            repaint();
            try {
                Thread.sleep(20); // Control the speed of the animation
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Heart Animation");
        HeartAnimation heartAnimation = new HeartAnimation();
        frame.add(heartAnimation);
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: