当前位置: 首页 > 面试题库 >

使用Java Swing滑动抽屉动画

施辉
2023-03-14
问题内容

我是新手,并且使用Java
swing设计接口。我希望抽屉在单击按钮时以滑动动画拉出。首先,是否可以这样做,如果可以,我该怎么做。谢谢。对于某些特定的方法信息,我将不胜感激。


问题答案:

根据要实现的目标,您可以采用多种可能的方法。

基本方法是简单地绘制图形和摆动Timer

这样您就可以简单地更新一个变量,该变量将作为绘制大小的基础,例如…

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class DrawerPaneTest {

    public static void main(String[] args) {
        new DrawerPaneTest();
    }

    public DrawerPaneTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new DrawerPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class DrawerPane extends JPanel {

        private boolean drawIn = false;
        private Timer timer;
        private int drawWidth = 0;
        private int drawDelta = 4;

        public DrawerPane() {
            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    timer.stop();
                    drawIn = !drawIn;
                    drawDelta = drawIn ? 4 : -4;
                    timer.start();
                }
            });

            timer = new Timer(40, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawWidth += drawDelta;
                    if (drawWidth >= getWidth() / 2) {
                        drawWidth = getWidth() / 2;
                        timer.stop();
                    } else if (drawWidth < 0) {
                        drawWidth = 0;
                        timer.stop();
                    }
                    repaint();
                }
            });
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setColor(Color.RED);
            g2d.drawRect(0, 0, drawWidth, getHeight());
            g2d.dispose();
        }
    }

}

这真的很基础,并且没有考虑到概念变慢/变慢等问题。对于这些,您最好看一下专用的动画框架,例如

  • 时序框架
  • 三叉戟
  • 通用补间引擎

您可能使用哪种取决于您要实现的目标,我个人喜欢Timing
Framework,主要是因为它给了我很大的自由度,例如Trident之类的东西(主要是)旨在提供更改属性的能力。一个对象,例如大小或位置。尽管时序框架可以做到这一点,但要达到这一点还需要做更多的工作。

我没有使用Universal Tween引擎,但是看到了一些非常不错的示例,例如Sliding-
Layout
,它实际上可以满足您的需求…



 类似资料:
  • 有没有办法禁用滑动手势来打开导航抽屉?在标签之间滑动时出现菜单真的很烦人。

  • 二等 三等

  • 问题内容: 我想要一个在应用启动时打开的滑块。它将通过按钮等打开,并且当用户关闭它时,将有更多按钮可供访问。滑动抽屉可以吗?我会在onCreate()方法中添加什么? 谢谢 问题答案: XML布局-在基本的LinearLayout中: 您的活动将如下所示:

  • 本文向大家介绍IOS实现点击滑动抽屉效果,包括了IOS实现点击滑动抽屉效果的使用技巧和注意事项,需要的朋友参考一下 最近,看到好多Android上的抽屉效果,也忍不住想要自己写一个。在Android里面可以用SlidingDrawer,很方便的实现。IOS上面就只有自己写了。其实原理很简单就是 UIView 的移动,和一些手势的操作。 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助。

  • 本文向大家介绍Swift4.1转场动画实现侧滑抽屉效果,包括了Swift4.1转场动画实现侧滑抽屉效果的使用技巧和注意事项,需要的朋友参考一下 本文实现使用了Modal转场动画,原因是项目多由导航控制器和标签控制器作为基类,为了不影响导航控制器的代理,转场动画使用模态交互。 代码使用SnapKit进行布局,能够适应屏幕旋转。手势速率大于300或进度超过30%的时候直接完成动画,否则动画回滚取消,具

  • 我想通过滑动禁用抽屉的打开,但不是通过滑动或后退按钮关闭。 我在抽屉中使用碎片,所以当抽屉打开时,我替换碎片并将其添加到Backback中。按Back(后退)按钮时,抽屉按预期关闭。 但是当我使用 就像在这篇文章中:禁用在android中打开导航抽屉的滑动手势,它会禁用所有滑动和返回按钮导航。现在关闭抽屉的唯一方法是触摸抽屉外面的屏幕。 是否有替代锁定模式并保留滑动关闭和后退按钮导航? 注意:我使