Java语言程序设计——篇十五(5)

在这里插入图片描述
在这里插入图片描述

       🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

在这里插入图片描述

动画

  • 在JavaFX中使用javafx.animation包中的API可实现动画。
  • JavaFX支持两种不同的方法来创建动画。
    ① 过渡动画
    ② 时间轴动画

过渡动画

  • 最简单的动画可以通过过渡效果实现,使用特定的过渡类,定义有关属性值,然后把它应用到某种节点,最后播放动画(调用过渡对象的play()方法)即可。
  • JavaFX提供了一些类方便地实现常见的动画效果。
  • 常用的过渡效果类:

javafx.animation.FadeTransition(淡出效果)
javafx.animation.PathTransition (路径变换效果)
javafx.animation.ScaleTransition(缩放效果)
javafx.animation.TranslateTransition(移动效果)
javafx.animation.RotateTransition(旋转效果)

  • 它们是javafx.animation.Animation的子类,该类中定义了动画的基本操作。

void play()
void playFromStart()
void pause()
void stop()

  • 该类中定义了一些属性:

autoReverse
rate
cycleCount(Timeline. INDEFINITE)
status

淡出效果

  • 使用FadeTransition类通过改变节点的透明度实现目标节点的逐渐消失效果,再通过setAutoReverse()方法实现节点的或隐或现效果。
  • 构造方法:

FadeTransition(Duration duration)指定一次转换持续的时间。可以使用new Duration(double millis)创建Duration实例。
常量INDEFINITE、ONE、UNKNOWN和ZERO来代表一个无限循环、1毫秒、未知以及0的持续时间。
FadeTransition(Duration duration, Node node)

实战演练

示例:使用文本实现淡入淡出。
在这里插入图片描述

  • 核心代码:
    在这里插入图片描述

移动效果

  • 使用PathTransition类可制作一个在给定时间内,节点沿着一条路径从一个端点到另外一个端点的移动动画。路径通过形状(Shape)对象指定。
  • PathTransition类的常用构造方法如下:
 PathTransition(Duration duration, Shape shape)
 PathTransition(Duration duration, Shape shape, Node node)
  • 属性:

duration
shape
node
orientation

实战演练

问题描述: 使用一个图片实现按路径移动同时播放音乐的效果。
在这里插入图片描述
核心代码:
在这里插入图片描述

缩放效果

  • 使用ScaleTransition类可以实现节点大小的缩放。
  • 构造方法:
    ScaleTransition(Duration duration)
    ScaleTransition(Duration duration, Node node)

实战演练

示例:在3秒内将一个文本的水平宽度和垂直高度增加80%。
核心代码:
在这里插入图片描述

旋转效果

  • 使用RotateTransition类可以实现对节点按指定的角度进行旋转。
  • 构造方法:
   RotateTransition(Duration duration)
   RotateTransition(Duration duration, Node node)
  • 通过setByAngle()方法设置节点旋转的角度,如果参数为正值沿顺时针旋转,负值则沿逆时针旋转。

实战演练

问题描述:
在3秒内将一个文本顺时针旋转360度。
在这里插入图片描述
核心代码:
在这里插入图片描述

综合实例

展示了如何对一个图片进行移动、缩放和旋转:

import javax.swing.*;  
import java.awt.*;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.awt.geom.AffineTransform;  
  
public class AnimationExample extends JPanel implements ActionListener {  
    private Timer timer;  
    private double angle = 0;  
    private double scale = 1.0;  
    private int x = 0, y = 0;  
    private Image image;  
  
    public AnimationExample() {  
        // 加载图片  
        image = ImageIO.read(getClass().getResource("path/to/your/image.jpg"));  
  
        // 设置定时器,每50毫秒刷新一次  
        timer = new Timer(50, this);  
        timer.start();  
  
        setPreferredSize(new Dimension(800, 600));  
    }  
  
    @Override  
    protected void paintComponent(Graphics g) {  
        super.paintComponent(g);  
  
        // 转换Graphics对象为Graphics2D,以便使用更高级的图形功能  
        Graphics2D g2d = (Graphics2D) g;  
  
        // 应用旋转  
        g2d.rotate(Math.toRadians(angle), image.getWidth(null) / 2, image.getHeight(null) / 2);  
  
        // 应用缩放  
        g2d.scale(scale, scale);  
  
        // 应用平移  
        g2d.translate(x, y);  
  
        // 绘制图片  
        g2d.drawImage(image, 0, 0, null);  
  
        // 重置转换(如果需要再次绘制时保持初始状态)  
        g2d.setTransform(new AffineTransform());  
    }  
  
    @Override  
    public void actionPerformed(ActionEvent e) {  
        // 更新角度、缩放和平移  
        angle += 2;  
        scale += 0.01; // 放大  
        x += 1;  
        y += 1;  
  
        // 重绘组件  
        repaint();  
    }  
  
    public static void main(String[] args) {  
        JFrame frame = new JFrame("Animation Example");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.add(new AnimationExample());  
        frame.pack();  
        frame.setLocationRelativeTo(null);  
        frame.setVisible(true);  
    }  
}
  • paintComponent方法中,我使用了Graphics2D的rotatescaletranslate方法来分别应用旋转、缩放和移动效果。
    AffineTransform的setTransform方法用于重置图形上下文的当前转换矩阵,这意呈着如果你在绘制多个对象时想要它们独立地应用不同的转换,你可能需要在每个对象绘制之前调用setTransform。但在本例中,因为我们只对一张图片进行所有操作,并且希望在每次repaint时都从头开始应用这些操作,所以重置转换矩阵不是必须的(尽管我在这里包含了它作为最佳实践)。
    通过调整Timer的延迟时间和actionPerformed方法中的增量值,你可以控制动画的速度和效果。
    博主用心写,读者点关注,互动传真情,知识不迷路。
  • 39
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听一世,繁花盛开

你的鼓励是我创作最大的动力与支

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值