现在的位置是: 小猿圈 > 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进行扩展,使用上相对简单
这次分享就到这!
感谢您的观看
下一篇: Android Hook
相关文章
- Android 性能优化--快、稳、省、小_快稳省
- Linux-epoll机制_an invalid event type was specified along with
- Android OTA 升级 之 Recovery_android recovery
- Swing 主题 - FlatLaf
- Compose折线图,贝赛尔曲线图,柱状图,圆饼图,圆环图。带动画和点击效果Compose折线图,贝赛尔曲线图,柱状图,
- 你真的会解决android ANR 问题吗?
- Certbot 自动化证书 - IMm99
- Android 热缓解框架解析_thermalmanagerservice
- 基于Kotlin Multiplatform实现静态文件服务器(五)_kotlin multiplatform h5
- Android Studio利用host文件配置dl.google.com的国内镜像源_androidstudio host