欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Android 中拖拽从一个组件到另外一个组件的写法(跨容器拖拽)

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

2025/9/23 6:54:11 来源:https://blog.csdn.net/du29571/article/details/148091762  浏览:    关键词: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;}
});

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词