android全局拖拽效果实现startDragAndDrop

news/2024/12/17 16:31:19/

有多种方式实现全角拖拽,我们基于系统标准的api  startDragAndDrop 来做介绍

实现步骤:

一、应用的的拖拽

1.1 通过长按触发

java">        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {ClipData dragClipData = ClipData.newPlainText("", "");View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);holder.itemView.startDragAndDrop(dragClipData, shadowBuilder, v, 0);return true;}});

1.2、设置拖拽监听,收到消息后可以处理自己的业务

java">        // 设置放置监听器binding.textView.setOnDragListener((view, dragEvent) -> {float x = dragEvent.getX();float y = dragEvent.getY();switch (dragEvent.getAction()) {case DragEvent.ACTION_DRAG_STARTED:LogUtil.d(TAG, "拖动开始: x=" + x + ", y=" + y);return true;case DragEvent.ACTION_DRAG_LOCATION:LogUtil.d(TAG, "拖动中: x=" + x + ", y=" + y);return true;case DragEvent.ACTION_DROP:LogUtil.d(TAG, "放开拖动: x=" + x + ", y=" + y);return true;case DragEvent.ACTION_DRAG_ENDED:LogUtil.d(TAG, "拖动结束: x=" + x + ", y=" + y);// 拖动结束return true;default:return false;}});

二、应用外的拖拽,可以被第三方应用接受你的拖拽事件

2.1 我们通过分析一张图片给第三方,先把图片放到图库,得到一个uri

java">public static Uri saveToGallery(Context context, Bitmap bitmap) {ContentValues values = new ContentValues();long currentTimeMillis = System.currentTimeMillis();//这个名称要唯一,否则到了32会报错values.put(MediaStore.Images.Media.DISPLAY_NAME, "image_name" +currentTimeMillis); // 图片名称values.put(MediaStore.Images.Media.DESCRIPTION, "image_description"); // 图片描述values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");     // 图片的MIME类型values.put(MediaStore.Images.Media.DATE_TAKEN, currentTimeMillis); // 图片的拍摄日期// 获取外部存储的公共图片目录Uri externalContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;// 保存图片到系统媒体库try {// 使用ContentResolver将Bitmap保存到指定的UriUri uri = context.getContentResolver().insert(externalContentUri, values);if (uri != null) {OutputStream outputStream = context.getContentResolver().openOutputStream(uri);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); // 将Bitmap压缩并保存到Uri对应的文件中outputStream.flush();outputStream.close();// 刷新媒体库MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "title", "description");return uri;}} catch (IOException e) {e.printStackTrace();}return null;}

2.2 把图片的uri发送出去,注意 startDragAndDrop的最后一个参数,需要让其他用有权限访问才可以。

val dragClipData = ClipData.newUri(requireContext().contentResolver, "Image", imageUri)
val dragShadow = View.DragShadowBuilder(holder.itemView)
holder.itemView.startDragAndDrop(dragClipData, dragShadow, null,DRAG_FLAG_GLOBAL.or(DRAG_FLAG_GLOBAL_URI_READ).or(DRAG_FLAG_OPAQUE))

如有更多需求,请参考官网示例:

doc地址:Enable drag and drop  |  Views  |  Android Developers

源码地址:git@github.com:android/user-interface-samples.git


http://www.ppmy.cn/news/1555901.html

相关文章

【人工智能】基于Python的自然语言处理:深入实现文本相似度计算

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 文本相似度计算是自然语言处理(NLP)中的核心任务,广泛应用于搜索引擎、推荐系统、问答系统等领域。本文全面解析文本相似度计算的核心技术,使用Python中的spaCy和sentence-transformers库实现多种方法,包括基…

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器,旨在简化 Node.js 和其他工具的安装和管理,在 2019 年出世,仍在积极开发中。Volta 采用了与 nvm 不同的方法:它不是管理 Node.js 的多个版本,而是管理项目及其依赖项。当…

西南大学硕士论文latex配置

1、settings文件配置 强制使用xelatex编译,使用浏览器浏览。 {"latex-workshop.latex.recipe.default": "latexmk (xelatex)","latex-workshop.latex.recipes": [{"name": "latexmk (xelatex)","tools&qu…

代理 IP 行业现状与未来趋势分析

随着互联网的飞速发展,代理 IP 行业在近年来逐渐兴起并成为网络技术领域中一个备受关注的细分行业。它在数据采集、网络营销、隐私保护等多个方面发挥着重要作用,其行业现状与未来发展趋势值得深入探讨。 目前,代理 IP 行业呈现出以下几个显著…

web 五子棋小游戏

效果图 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Gomoku</title><link rel&q…

Repo管理

文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道&#xff0c;Git是用来管理某一个仓库&#xff0c;那当一个项目用到了多个仓库时&#xff0c;怎么来同步管理这些仓库呢&#xff1f;这个时候就可以引入Repo管理。 Repo介绍 …

实战 | 某院校小程序记录

视频教程在我主页简介里 目录&#xff1a; 前言&#xff1a; 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离…

吉利百度发表联合声明:将积极协助极越处理相关事宜

吉利百度发表联合声明&#xff1a;将积极协助极越处理相关事宜 12月13日&#xff0c;吉利和百度发表关于极越汽车的联合声明&#xff0c;作为股东&#xff0c;将积极协助集度管理层妥善处理相关事宜&#xff1a;第一时间解决员工社保缴纳、离职员工问题&#xff1b;维护用户车…