【问题标题】:how can i implement drag and drop in urho 3d view?如何在 urho 3d 视图中实现拖放?
【发布时间】:2019-09-05 03:38:30
【问题描述】:

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

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

【问题讨论】:

    标签: xamarin.forms xamarin.uwp urhosharp urho3d


    【解决方案1】:

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

    urhosharp: Basic Actions

    urhosharp的文档中,有一些基本的动作解释,但里面没有拖放。也许你可以结合每个平台上的动作和拖动方法来做到这一点。但这需要你去尝试。


    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 中的拖放,用户可以使用连续手势将项目从屏幕上的一个位置拖到另一个位置。拖放活动可以在单个应用程序中进行,也可以在一个应用程序中开始并在另一个应用程序中结束。

    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来移动视图。这里是Walkthrough: Using Touch in Xamarin.iOS.你需要做的就是让view.center跟随panGesture来改变。


    安卓: reference link here

    借助 Android 拖放框架,您可以允许用户使用图形拖放手势将数据从一个视图移动到另一个视图。该框架包括一个拖动事件类、拖动侦听器以及辅助方法和类。

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

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

    表。 DragEvent 动作类型:

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

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


    这里也有关于Drag & Drop in Xamarin forms的讨论。可能会有帮助。

    【讨论】:

    • 非常感谢。拖放仅通过触摸移动事件实现,但通过从该事件获取 X 和 Y 位置坐标。上面的链接很有帮助。
    • @user10678697 很高兴为您提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多