Pcanvas是否支持双击操作进行缩放而不是拖动操作



当我播放短笛演示的缩放示例时,我有一个疑问,即 Pcanvas 仅支持拖动操作进行缩放?

因此,我

查看了Pcanvas的源代码,然后我发现它有一个变量PZoomEventHandler来控制缩放操作。此外,我查看了PZoomEventHandler的源代码,我意识到它是从PDragSequenceEventHandler继承而来的。这是否意味着 Pcanvas 仅支持拖动操作进行缩放?

如果我是对的,以下是我的详细信息查询:

  1. 如果我想实现双击操作进行缩放,哪个类Piccolo 我应该用来让 PZoomEventHandler 继承自PDragSequenceEventHandler

  2. 如果我更改PZoomEventHandler,肯定会影响所有人变焦性能。我再添加一个变量更好吗 在 Pcanvas 中PZoomEventHandlerV2以使用双击操作 ?

感谢您的时间和建议。 :D

PDragSequenceEventHandler简化了基于鼠标拖动事件的处理程序的实现。在您的情况下,您可以从 PBasicInputEventHandler 派生。此外,您可以根据需要添加任意数量的事件侦听器,只需确保它们不会相互干扰即可。在添加用户交互中阅读有关事件侦听器的更多信息。

下面是一个对鼠标滚轮旋转做出反应的缩放处理程序示例(不确定您希望如何在基于双击的缩放中取消缩放,所以我使用了鼠标滚轮)。该示例保留基于拖动的原始缩放处理程序,并根据鼠标滚轮添加新的缩放处理程序。如果需要,还可以使用removeInputEventListener方法删除原始缩放处理程序。

import java.awt.Dimension;
import java.awt.geom.Point2D;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import edu.umd.cs.piccolo.PCanvas;
import edu.umd.cs.piccolo.PLayer;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.event.PInputEvent;
import edu.umd.cs.piccolo.nodes.PPath;
public class TestZoom {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {   
            public void run() {   
                JFrame frame = new JFrame("TestZoom");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationByPlatform(true);
                final PCanvas canvas = new PCanvas() {
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(300, 300);
                    }
                };
                PLayer layer = new PLayer();
                canvas.getCamera().addLayer(0, layer);
                canvas.getCamera().getRoot().addChild(layer);
                final PPath node = PPath.createRectangle(100, 100, 100, 100);
                canvas.getLayer().addChild(node);
                canvas.addInputEventListener(new MouseZoomHandler());
                frame.add(canvas);            
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
    public static class MouseZoomHandler extends PBasicInputEventHandler {
        @Override
        public void mouseWheelRotated(final PInputEvent event) {
            final double scale = 1 - 0.2 * event.getWheelRotation(); 
            final Point2D point = event.getPosition();
            event.getCamera().scaleViewAboutPoint(scale, 
                    point.getX(), point.getY());                
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新