欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Java语言程序设计——篇十五(5)

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

2024/10/24 17:18:41 来源:https://blog.csdn.net/2201_75851346/article/details/141400345  浏览:    关键词: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方法中的增量值,你可以控制动画的速度和效果。
    博主用心写,读者点关注,互动传真情,知识不迷路。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com