抖音时间罗盘java代码
时间: 2023-09-08 22:03:24 浏览: 55
抖音时间罗盘是一种根据系统时间动态变换背景颜色的效果,可以通过以下Java代码实现:
```java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class DouyinTimeCompass extends JPanel implements ActionListener {
private Timer timer;
public DouyinTimeCompass() {
timer = new Timer(1000, this);
timer.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int r = 200;
int x = getWidth() / 2;
int y = getHeight() / 2;
RenderingHints rh = new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(rh);
drawBackground(g2d, x, y, r);
drawHourHand(g2d, x, y, r, hour, minute);
drawMinuteHand(g2d, x, y, r, minute, second);
drawSecondHand(g2d, x, y, r, second);
}
private void drawBackground(Graphics2D g2d, int x, int y, int r) {
int[] colors = {0xFFEEC900, 0xFF4285F4, 0xFF34A853, 0xFFEA4335};
int direction = Calendar.getInstance().get(Calendar.SECOND) % 4;
g2d.setColor(new Color(colors[direction]));
g2d.fillOval(x - r, y - r, 2 * r, 2 * r);
}
private void drawHourHand(Graphics2D g2d, int x, int y, int r, int hour, int minute) {
int handRadius = (int) (r * 0.4);
int angle = (int) ((hour + minute / 60.0) / 12 * 360 - 90);
int handX = (int) (x + Math.cos(Math.toRadians(angle)) * handRadius);
int handY = (int) (y + Math.sin(Math.toRadians(angle)) * handRadius);
g2d.setColor(Color.white);
g2d.drawLine(x, y, handX, handY);
}
private void drawMinuteHand(Graphics2D g2d, int x, int y, int r, int minute, int second) {
int handRadius = (int) (r * 0.6);
int angle = (int) ((minute + second / 60.0) / 60 * 360 - 90);
int handX = (int) (x + Math.cos(Math.toRadians(angle)) * handRadius);
int handY = (int) (y + Math.sin(Math.toRadians(angle)) * handRadius);
g2d.setColor(Color.white);
g2d.drawLine(x, y, handX, handY);
}
private void drawSecondHand(Graphics2D g2d, int x, int y, int r, int second) {
int handRadius = (int) (r * 0.9);
int angle = (int) ((second) / 60.0 * 360 - 90);
int handX = (int) (x + Math.cos(Math.toRadians(angle)) * handRadius);
int handY = (int) (y + Math.sin(Math.toRadians(angle)) * handRadius);
g2d.setColor(Color.white);
g2d.drawLine(x, y, handX, handY);
}
public void actionPerformed(ActionEvent e) {
repaint();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Douyin Time Compass");
DouyinTimeCompass compass = new DouyinTimeCompass();
frame.add(compass);
frame.setSize(new Dimension(400, 400));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
```
以上代码是通过Java Swing来实现抖音时间罗盘的效果。代码中使用了Timer类来定时更新界面,根据系统时间获取小时、分钟、秒钟,然后根据这些值计算时针、分针和秒针的位置,并在界面上绘制各个指针。同时,根据当前秒钟数的奇偶性来决定背景颜色的变换。