我如何在 urho 3d 视图中实现拖放?

how can i implement drag and drop in urho 3d view?

我已经使用 urhosharp 为我的 xamarin uwp/ios/android 项目添加了 3d 视图对象。唯一有效的事件是触摸事件,但我也想使用拖放,以便对象可以移动到 3D 视图中的不同位置。有什么建议吗?

https://us.v-cdn.net/5019960/uploads/editor/ni/u16pg79v2m62.png

还没有用过urhosharp,但是这里有一些关于使用拖放的建议,不知道对你有没有帮助。

urhosharp: Basic Actions

来自 urhosharp 的文档,有一些基本操作说明,但没有拖放 it.Maybe 你可以通过组合操作和拖动方法来完成平台。但这需要你去尝试。


UWP: reference link here

以下概述了在您的应用中启用拖放功能所需执行的操作:

  1. 通过将元素的 CanDrag 属性 设置为启用拖动元素 真的。
  2. 构建数据包。系统处理图像和文本 自动,但对于其他内容,您需要处理 DragStartedDragCompleted 事件并使用它们构建您的 自己的数据包。
  3. 通过将所有 AllowDrop 属性 设置为 true 来启用丢弃 可以接收掉落内容的元素。
  4. 处理DragOver事件让系统知道拖拽的类型 元素可以接收的操作。
  5. 处理 Drop 事件以接收放置的内容。

代码示例:

<Grid AllowDrop="True" DragOver="Grid_DragOver" Drop="Grid_Drop"
      Background="LightBlue" Margin="10,10,10,353">
    <TextBlock>Drop anywhere in the blue area</TextBlock>
</Grid>

private void Grid_DragOver(object sender, DragEventArgs e)
{
    e.AcceptedOperation = DataPackageOperation.Copy;
}

IOS: reference link here

通过 iOS 中的拖放,用户可以使用连续手势将项目从屏幕上的一个位置拖到另一个位置。拖放操作 activity 可以在单个应用程序中进行,也可以在一个应用程序中开始并在另一个应用程序中结束。

  1. 使用拖动项在源应用程序和目标应用程序之间传达数据表示承诺。
  2. 采用拖动交互API,提供拖动项。
  3. 采用拖放交互 API 来有选择地使用拖动的内容。
  4. 演示如何为 UIImageView 实例启用拖放功能。

示例代码:

func customEnableDragging(on view: UIView, dragInteractionDelegate: UIDragInteractionDelegate) {
    let dragInteraction = UIDragInteraction(delegate: dragInteractionDelegate)
    view.addInteraction(dragInteraction)
}

func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] {
    // Cast to NSString is required for NSItemProviderWriting support.
    let stringItemProvider = NSItemProvider(object: "Hello World" as NSString)
    return [
        UIDragItem(itemProvider: stringItemProvider)
    ]
}

这是 Xamarin IOS 的 sample

或者你可以在IOS中使用UIPanGestureRecognizer移动view.Here是Walkthrough: Using Touch in Xamarin.iOS.你需要做的就是让view.center 跟随panGesture改变。


Android: reference link here

使用 Android drag/drop 框架,您可以让您的用户使用图形拖放手势将数据从一个视图移动到另一个视图。该框架包括拖动事件 class、拖动监听器、辅助方法和 classes.

拖放过程中基本上有四个步骤或状态:

  1. Started:为了响应用户开始拖动的手势,您的应用程序调用 startDrag() 来告诉系统开始拖动。
  2. 继续:用户继续拖动。
  3. Dropped:用户在可以接受数据的View的边界框内释放拖动阴影。
  4. 结束:用户释放拖动阴影后,系统发出(如果需要)动作类型为ACTION_DROP的拖动事件后,系统发送输出一个动作类型为 ACTION_DRAG_ENDED 的拖动事件,表示拖动操作结束。

Table。 DragEvent 动作类型:

或者在Android中可以使用onTouchEvent移动视图,需要计算视图的位置。Walkthrough - Using Touch in Android

主要是处理按下和移动两条消息,重载onTouchEvent。数学知识(翻译):记录ACTION_DOWN时的坐标点,根据当前位置和[=时按下的位置计算平移量137=]。刷新控件,导致控件重绘,重绘时移动绘图左上角坐标


这里也有关于的讨论。可能会有帮助。