当前位置: 首页 > news >正文

Android 中拖拽从一个组件到另外一个组件的写法(跨容器拖拽)

在 Android 中,拖拽一个图片(例如 ImageView)到另一个组件(如 LinearLayout、FrameLayout 等容器)涉及以下步骤:

  1. 准备工作
    源组件:你从哪里开始拖动(如 ImageView)。
    目标组件:你想把图片拖到哪里(如 LinearLayout 或其他可接收拖放的容器)。
// 在 onCreate 或 onViewCreated 中设置
ImageView imageView = findViewById(R.id.image_view);
LinearLayout targetLayout = findViewById(R.id.target_container);// 设置长按开始拖拽
imageView.setOnLongClickListener(v -> {ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());ClipData clipData = ClipData.newPlainText("image", "dragged_image");View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(imageView);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {v.startDragAndDrop(clipData, shadowBuilder, imageView, 0);} else {v.startDrag(clipData, shadowBuilder, imageView, 0);}imageView.setVisibility(View.INVISIBLE); // 拖出后隐藏原图return true;
});// 设置目标区域的监听
targetLayout.setOnDragListener((v, event) -> {int action = event.getAction();switch (action) {case DragEvent.ACTION_DRAG_ENTERED:// 进入目标区域return true;case DragEvent.ACTION_DROP:// 放开操作View droppedView = (View) event.getLocalState();ViewGroup oldParent = (ViewGroup) droppedView.getParent();if (oldParent != null) {oldParent.removeView(droppedView);}// 添加到新容器((ViewGroup) v).addView(droppedView);droppedView.setVisibility(View.VISIBLE);return true;case DragEvent.ACTION_DRAG_EXITED:// 鼠标离开return true;case DragEvent.ACTION_DRAG_ENDED:// 拖拽结束return true;default:return true;}
});
http://www.xdnf.cn/news/544177.html

相关文章:

  • mysql不能聚合之数据清洗逗号
  • Docker中部署Alertmanager
  • 碰一碰发视频源码:技术架构与全链路解析
  • Node.js路径处理指南:如何安全获取当前脚本目录路径
  • Redis 命令大全
  • CentOS 7上BIND9配置DNS服务器指南
  • 扫盲笔记之NPM
  • 精益数据分析(72/126):MVP的核心法则——消除阻碍与聚焦关键指标
  • 数据分析预备篇---Pandas的DataFrame的更多操作
  • R语言学习--Day04--数据分析技巧
  • C语言:指针——解锁编程的灵魂
  • 了解 DDD 吗?DDD 和 MVC 的区别是什么?
  • 【Redisson】快速实现分布式锁
  • 深度学习-runner.run(data_loaders, cfg.workflow)内部执行过程
  • Docker run -v 的 rw 和 ro 模式_docker ro
  • React Flow 数据持久化:Django 后端存储与加载的最佳实践(含详细代码解析)
  • React中使用ahooks处理业务场景
  • 网络攻防技术
  • 微软押注“代理式AI网络”:一场重塑软件开发与工作方式的技术革命
  • 网络攻击通常会被分为哪些类型?
  • FreeSWITCH rtcp-mux 测试
  • Hbuilder X4.65新建vue3项目存在的问题以及解决办法
  • HTB 赛季8靶场 - Puppy
  • 对未来软件的看法
  • Vue响应式系统演进与实现解析
  • Linux系统之traceroute命令详解:追踪网络路径的核心工具
  • Linux网络编程:广播、组播与原始套接字
  • 51单片机编程学习笔记——无源蜂鸣器演奏《祝你生日快乐》
  • 计算机网络通信技术与协议(七)———关于ACL的详细解释
  • 高密度服务器机柜散热方案:高风压风机在复杂风道中的关键作用与选型要点