如何随着时间的推移记录移动,回放鼠标移动?
How to record movement over time, Having a playback of the mouse movements?
我正在尝试记录鼠标随时间的移动并在播放时查看它们(可能是视频,可食用)。当给定特定时间时,我需要能够检索鼠标在坐标中的确切位置。
例如:记录鼠标移动 20 秒。我需要在 10.6 秒获取鼠标的位置。
随时间存储这些鼠标坐标的最佳方法是什么?
最好的播放方式是让视频完整播放?
为了获取鼠标的坐标,我使用的是Java的官方鼠标移动监听器https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html
public class MouseMotionEventDemo extends JPanel
implements MouseMotionListener {
//...in initialization code:
//Register for mouse events on blankArea and panel.
blankArea.addMouseMotionListener(this);
addMouseMotionListener(this);
...
}
public void mouseMoved(MouseEvent e) {
saySomething("Mouse moved", e);
}
public void mouseDragged(MouseEvent e) {
saySomething("Mouse dragged", e);
}
void saySomething(String eventDescription, MouseEvent e) {
textArea.append(eventDescription
+ " (" + e.getX() + "," + e.getY() + ")"
+ " detected on "
+ e.getComponent().getClass().getName()
+ newline);
}
}
MouseEventclass分别有getX()
等方法getXOnScreen()
,Y轴也一样。
解决此问题的一种方法:创建一个包含您需要的信息的 class,例如:
class SimpleCoordinate {
private final int x;
...
然后在你的主程序中:
List<SimpleCoordinate> coordinatesHistory = new ArrayList<>();
并在您的听众中执行:
coordinatesHistory.add(new SimpleCoordinate(...))
您在 class 中存储的具体内容由您决定。可能只是 "coordinates",但添加某种时间戳也可能有意义。
关键问题要仔细consider/design/test:
- "granular" 鼠标侦听器如何(比如当你移动鼠标非常快时,你会得到多少事件)
- 该程序应该记录多长时间(如果它应该记录用户 activity 的天数或周数,您可能 运行 内存不足,只需将该信息添加到内存即可)
当然,您也可以将记录推送到某些 "queue",并让另一个线程定期从队列中获取元素,以某种方式持久保存它们。
我正在尝试记录鼠标随时间的移动并在播放时查看它们(可能是视频,可食用)。当给定特定时间时,我需要能够检索鼠标在坐标中的确切位置。 例如:记录鼠标移动 20 秒。我需要在 10.6 秒获取鼠标的位置。
随时间存储这些鼠标坐标的最佳方法是什么? 最好的播放方式是让视频完整播放?
为了获取鼠标的坐标,我使用的是Java的官方鼠标移动监听器https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html
public class MouseMotionEventDemo extends JPanel
implements MouseMotionListener {
//...in initialization code:
//Register for mouse events on blankArea and panel.
blankArea.addMouseMotionListener(this);
addMouseMotionListener(this);
...
}
public void mouseMoved(MouseEvent e) {
saySomething("Mouse moved", e);
}
public void mouseDragged(MouseEvent e) {
saySomething("Mouse dragged", e);
}
void saySomething(String eventDescription, MouseEvent e) {
textArea.append(eventDescription
+ " (" + e.getX() + "," + e.getY() + ")"
+ " detected on "
+ e.getComponent().getClass().getName()
+ newline);
}
}
MouseEventclass分别有getX()
等方法getXOnScreen()
,Y轴也一样。
解决此问题的一种方法:创建一个包含您需要的信息的 class,例如:
class SimpleCoordinate {
private final int x;
...
然后在你的主程序中:
List<SimpleCoordinate> coordinatesHistory = new ArrayList<>();
并在您的听众中执行:
coordinatesHistory.add(new SimpleCoordinate(...))
您在 class 中存储的具体内容由您决定。可能只是 "coordinates",但添加某种时间戳也可能有意义。
关键问题要仔细consider/design/test:
- "granular" 鼠标侦听器如何(比如当你移动鼠标非常快时,你会得到多少事件)
- 该程序应该记录多长时间(如果它应该记录用户 activity 的天数或周数,您可能 运行 内存不足,只需将该信息添加到内存即可)
当然,您也可以将记录推送到某些 "queue",并让另一个线程定期从队列中获取元素,以某种方式持久保存它们。