GWT 2.5 Canvas toDataURL() 在 MouseUp 处理程序中工作,但不能在 TouchEnd 处



我使用 GWT 2.5 Canvas 实现了一个数字签名小部件,它非常适合鼠标事件。不幸的是,它在触摸事件中惨遭失败,我不知道为什么。在触摸屏上绘制签名,但canvas.toDataURL()始终不返回任何内容(实际上是"data:")。代码片段是:

  _canvas.addMouseMoveHandler(new MouseMoveHandler() {
  public void onMouseMove(MouseMoveEvent event) {
      int thisX = event.getRelativeX(_canvas.getElement());
      int thisY = event.getRelativeY(_canvas.getElement());
      if (_lastX >= 0 && _lastY >= 0) {
    _exists = true;
    _context.moveTo(_lastX, _lastY);
    _context.lineTo(thisX, thisY);
    _context.stroke();
      }
      _lastX = thisX;
      _lastY = thisY;
  }
});
  _canvas.addMouseUpHandler(new MouseUpHandler() {
  public void onMouseUp(MouseUpEvent event) { 
     _lastX = -1;
    _lastY = -1;
   _drawing = false; 
    if (_exists) _handler.sigChanged(_canvas.toDataUrl());
  }
});
  _canvas.addTouchMoveHandler(new TouchMoveHandler() {
  public void onTouchMove(TouchMoveEvent event) {
    if (event.getTouches().length() > 0) {
      Touch touch = event.getTouches().get(0);
      int thisX = touch.getRelativeX(_canvas.getElement());
      int thisY = touch.getRelativeY(_canvas.getElement());
      if (_lastX >= 0 && _lastY >= 0) {
    _context.moveTo(_lastX, _lastY);
    _context.lineTo(thisX, thisY);
    _context.stroke();
    //_handler.sigChanged(_canvas.toDataUrl());
      }
      _lastX = thisX;
      _lastY = thisY;
    }
    event.preventDefault();
    event.stopPropagation();
  }
});
  _canvas.addTouchEndHandler(new TouchEndHandler() {
  public void onTouchEnd(TouchEndEvent event) {
    _handler.sigChanged(_canvas.toDataUrl());
    com.google.gwt.user.client.Window.alert("onTouchEnd1: " + _canvas.toDataUrl());
  }
  event.preventDefault();
});

同样,toDataURL() 适用于鼠标事件,但在触摸事件中始终不返回任何内容,即使您从触摸移动处理程序调用它也是如此。任何帮助或建议将不胜感激。

我借了一部运行较新版本(4.1 与 2.3)的朋友安卓手机,它可以工作。我不明白它,但我认为这是 GWT 2.5 的错误,我正在继续前进。

詹姆斯

相关内容

最新更新