现在的位置是: 小猿圈 > Compose for desktop实现拖拽文件实现desktop端的拖拽文件 文件拖拽两种方式 第一种方式参考: 目
Compose for desktop实现拖拽文件实现desktop端的拖拽文件 文件拖拽两种方式 第一种方式参考: 目
版权声明
本文转自https://juejin.cn/post/7282150745163268152,版权归原作者所有。如有侵权,请联系删除,谢谢。
实现desktop端的拖拽文件
文件拖拽两种方式
第一种方式参考:
目前国内能查到的应该是《使用ComposeDesktop开发一款桌面端多功能APK工具》
《Compose for Desktop桌面端简单的APK工具》
但是目前有个问题:
val target = object : DropTarget() {
@Synchronized
override fun drop(evt: DropTargetDropEvent) {
evt.acceptDrop(DnDConstants.ACTION_REFERENCE)
val droppedFiles = evt.transferable.getTransferData(DataFlavor.javaFileListFlavor) as List<*>
droppedFiles.first()?.let {
onFileDrop(it.toString())
}
}
}
window.contentPane.components[0].dropTarget = target
通过window添加到对应区域中的Component后,依然是全局,可能是版本问题造成无法像上面那两位老师一样实现。
第二种方式
第二种是在国外也有这样的需求,因此有人给官方提了issue,而且官方也刚好放出了对应新api,Modifier.onExternalDrag。
代码更简单了,看下面例子
@OptIn(ExperimentalResourceApi::class, ExperimentalComposeUiApi::class)
@Composable
fun PluginsLoadWidget() {
val stroke = Stroke(width = 2f, pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f))
var isDragging by remember { mutableStateOf(false) }
Box(
modifier = Modifier.fillMaxSize(0.5f)
.background(if (!isDragging) MaterialTheme.colorScheme.background else MaterialTheme.colorScheme.inverseOnSurface, shape = RoundedCornerShape(10f))
.drawBehind {
drawRoundRect(
topLeft = Offset(10f, 10f),
size = Size(drawContext.size.width - 20f, drawContext.size.height - 20f),
color = Color.Black,
style = stroke,
cornerRadius = CornerRadius(10f,10f)
)
}.onExternalDrag(
onDragStart = {
isDragging = true
},
onDragExit = {
isDragging = false
},
onDrag = {
},
onDrop = { state ->
val dragData = state.dragData
if (dragData is DragData.Image) {
// println(dragData.readImage().toString())
} else if (dragData is DragData.FilesList) {
dragData.readFiles().first().let {
println(it)
}
}
isDragging = false
}),
contentAlignment = Alignment.Center
) {
Icon(
painter = painterResource("system_update_alt-24px.xml"),
contentDescription = "上传插件",
modifier = Modifier.fillMaxSize(1f)
)
}
}
Gif:
当然第二种方式,也是基于通过window添加target实现监听对应的file文件,对MModifier进行扩展,使用上相对简单
这次分享就到这!
感谢您的观看
相关文章
- Flutter踩坑记录(三)-- 更改入口执行文件
- iOS模拟器for Windows - IpaSimulator完全指南
- Android:最全面&详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)_android 性能优化
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools) - MinteLiu
- 【问题回溯】记录处理launcher3滑动卡顿问题_android launcher3去掉抽屉模式后滑动翻页卡帧
- Android Studio利用host文件配置dl.google.com的国内镜像源_androidstudio host
- Certbot 自动化证书 - IMm99
- Swing 主题 - FlatLaf
- 一文读懂Kotlin的数据流 冷流 热流_kotlin冷流和热流
- Jetpack Compose之持久保存和恢复LazyColumn的滚动位置_jetpack的compose中设置lazycolumn滚动到最底部