首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在setOnDragListener中使用两个按钮?

在setOnDragListener中使用两个按钮,可以通过以下步骤实现:

  1. 首先,创建两个按钮对象,并设置它们的拖拽监听器。例如,创建Button对象button1和button2,并为它们设置setOnDragListener监听器。
  2. 在setOnDragListener的onDrag()方法中,判断拖拽事件的动作类型。可以使用DragEvent对象的getAction()方法获取动作类型。
  3. 如果动作类型是ACTION_DRAG_STARTED,表示拖拽事件已经开始,可以执行一些初始化操作。
  4. 如果动作类型是ACTION_DROP,表示拖拽事件已经结束,可以执行相应的操作。在这里,可以根据拖拽事件的源视图来判断是哪个按钮被拖拽到了目标视图上。
  5. 在ACTION_DROP中,可以使用DragEvent对象的getClipData()方法获取拖拽事件的数据。可以将数据与按钮进行关联,例如使用按钮的Tag属性来存储数据。
  6. 根据拖拽事件的源视图来判断是哪个按钮被拖拽到了目标视图上,并执行相应的操作。可以使用按钮的Tag属性来获取关联的数据。

以下是一个示例代码:

代码语言:txt
复制
Button button1 = findViewById(R.id.button1);
Button button2 = findViewById(R.id.button2);

button1.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        // 设置拖拽阴影
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
        // 开始拖拽
        v.startDrag(null, shadowBuilder, v, 0);
        return true;
    }
});

button2.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        // 设置拖拽阴影
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
        // 开始拖拽
        v.startDrag(null, shadowBuilder, v, 0);
        return true;
    }
});

button1.setOnDragListener(new View.OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
        int action = event.getAction();
        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED:
                // 拖拽事件开始
                break;
            case DragEvent.ACTION_DROP:
                // 拖拽事件结束
                // 获取拖拽事件的数据
                ClipData clipData = event.getClipData();
                // 获取关联的按钮
                Button sourceButton = (Button) event.getLocalState();
                // 获取关联的数据
                String data = clipData.getItemAt(0).getText().toString();
                if (sourceButton == button1) {
                    // 拖拽到button1上的操作
                    // 根据数据执行相应的操作
                } else if (sourceButton == button2) {
                    // 拖拽到button2上的操作
                    // 根据数据执行相应的操作
                }
                break;
        }
        return true;
    }
});

button2.setOnDragListener(new View.OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
        int action = event.getAction();
        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED:
                // 拖拽事件开始
                break;
            case DragEvent.ACTION_DROP:
                // 拖拽事件结束
                // 获取拖拽事件的数据
                ClipData clipData = event.getClipData();
                // 获取关联的按钮
                Button sourceButton = (Button) event.getLocalState();
                // 获取关联的数据
                String data = clipData.getItemAt(0).getText().toString();
                if (sourceButton == button1) {
                    // 拖拽到button1上的操作
                    // 根据数据执行相应的操作
                } else if (sourceButton == button2) {
                    // 拖拽到button2上的操作
                    // 根据数据执行相应的操作
                }
                break;
        }
        return true;
    }
});

这是一个简单的示例,你可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在 SwiftUI 创建悬浮操作按钮

尽管它来自 Android,但在一些 iOS 应用也可以看到这种模式。以下是 Twitter 应用悬浮操作按钮的示例。Twitter App 在最重要的操作步骤,发布推文时使用悬浮操作按钮。...如下图,在右下角有一个蓝底中间有加号的按钮。下面我们就来详细介绍一下还如何实现这个悬浮按钮需求。创建悬浮操作按钮如何 SwiftUI 创建一个类似 Twitter App 的悬浮按钮。...,是需要实现需求的第一步,悬浮按钮应该出现在屏幕的主要内容前面。...将一个按钮放在内容视图上。这将在列表视图上添加一个加号图像按钮。示例运行截图如下:悬浮按钮位于屏幕的右下角接着,是需要实现需求的第二步,使按钮与内容视图对齐到右下角。...总结在本文中,我们学习了如何在 SwiftUI 创建一个悬浮操作按钮,它是 Android 和 Material Design 中常用的 UI 元素。通过逐步实现悬浮按钮的各个特性来完成这个过程。

16532
  • 【DB笔试面试511】如何在Oracle写操作系统文件,写日志?

    题目部分 如何在Oracle写操作系统文件,写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...若想普通用户使用该包,则需要在SYS用户下执行“GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;”命令。 Oracle使用哪个包可以生成并传递数据库告警信息?...在CLIENT_INFO列存放程序的客户端信息;MODULE列存放主程序名,包的名称;ACTION列存放程序包的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle写操作系统文件,写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

    28.8K30

    使用工具栏控件的下拉按钮

    ---- 前言 `提示:这里可以添加本文 ---- 提示:以下是本篇文章正文内容,下面案例可供参考 一、一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 一、使用工具栏控件的下拉按钮 示例:...项目 8 个参与者 除了标准推送按钮外,工具栏还可以有下拉按钮。 下拉按钮通常由附加向下箭头表示。...以下过程演示如何使用弹出菜单实现下拉工具栏按钮: 实现下拉按钮 1 创建 CToolBarCtrl 对象后,使用以下代码设置 TBSTYLE_EX_DRAWDDARROWS 样式: m_ToolBarCtrl.SetExtendedStyle...以下示例演示如何修改 CToolBarCtrl 对象的现有按钮: TBBUTTONINFO tbi; tbi.dwMask = TBIF_STYLE; tbi.cbSize = sizeof(TBBUTTONINFO...ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1) 4 在新处理程序,显示相应的弹出菜单。

    25340

    何在CDH安装和使用StreamSets

    [t1kggp7p0u.jpeg] [gthtxgcxg9.jpeg] 2.文档编写目的 ---- 本文档主要讲述如何在Cloudera Manager 管理的集群安装StreamSets和基本使用。...Field Masker提供固定和可变长度的掩码来屏蔽字段的所有数据。要显示数据的指定位置,您可以使用自定义掩码。...要显示数据的一组位置,可以使用正则表达式掩码来定义数据的结构,然后显示一个或多个组。...数据规则是用户定义的规则,用于检查在两个阶段之间移动的数据。它们是查找异常值和异常数据的有效方法。 数据规则和警报需要详细了解通过管道的数据。对于更一般的管道监控信息,您可以使用度量标准规则和警报。...我们将使用带有record:value()函数的表达式来标识信用卡号码字段/credit_card为空的情况。该函数返回指定字段的数据。

    35.9K113

    在Excel处理和使用地理空间数据(POI数据)

    ,用于加载工作底图) III 其他 (非必须,自己下载的卫星图,自己处理的地图,绘制的总平面等——用于自定义底图) 03 具体操作 打开数据表格——[插入]选项卡——三维地图——自动打开三维地图窗口...https://support.office.com/zh-cn/article/三维地图入门-6b56a50d-3c3e-4a9e-a527-eea62a387030) ---- 接下来来将一些[调试]的关键点...I 坐标问题 理论上地图在无法使用通用的WGS84坐标系(规定吧),同一份数据对比ArcGIS的WGS84(4326)和Excel的WGS84、CJ-02(火星坐标系)的显示效果,可能WGS84(...4326)坐标系更加准确一点,也有查到说必应地图全球统一使用WGS84坐标系。...⇩不同坐标系下的对比 结论:建议使用WGS84坐标系(使用Sid分享脚本的用户可略过) II 自定义底图 Excel提供的底图为必应地图,虽然有很多种色彩体系,但不支持去掉路名、点位名称等标签,可能有点乱

    10.9K20

    技术干货| 如何在MongoDB轻松使用GridFS?

    同样,最后的那个块也不会大于默认的块大小,仅使用所需的空间以及一些其他元数据。 GridFS使用两个集合来存储文件。一个集合存储文件块,另一个集合存储文件元数据。 ...GridFS Collections GridFS将文件存储在两个集合: 块存储二进制块。有关详细信息,请参见chunks集合。 文件存储文件的元数据。有关详细信息,请参见文件集合。...默认情况下,GridFS使用两个集合以及一个名为fs的存储桶: fs.files fs.chunks 您可以选择其他存储桶名称,也可以在一个数据库创建多个存储桶。...该索引允许高效地检索文件,本示例所示: db.fs.files.find( { filename: myFileName } ).sort( { uploadDate: 1 } ) 符合GridFS规范的驱动程序将在读取和写入操作之前自动确保此索引存在...分片GridFS GridFS考虑两个集合-files和chunks。

    6.6K30

    何在ThinkPHP6使用Markdown

    摘要 本文介绍了Markdown的背景、语法、在ThinkPHP6使用方法以及总结。Markdown是一种轻量级标记语言,可以将纯文本编写的文档转化为HTML。...在ThinkPHP6使用Markdown 在ThinkPHP6.0版本之后,内置了对Markdown的支持,只需安装扩展和配置模板引擎即可使用Markdown撰写和渲染文档。...配置模板引擎 在完成扩展安装后,需要进一步在模板引擎配置Markdown的解析器。...markdown键表示为Markdown文件解析的回调函数,该函数将传入两个参数:第一个参数为Markdown格式的文本,第二个参数为可选的模板变量。...例如,我们可以在控制器使用 view 方法渲染Markdown文件: public function index() { $markdown = file_get_contents('path

    22310
    领券