codenameone - CN1中如何避免拖拽痕迹
问题描述
正如您在下面的动画中看到的那样,拖动会导致我不想要的痕迹。此外,拖动的组件是垂直移动的。我想这与状态栏有关。但是我怎样才能避免这种情况呢?
这是我的代码:
class LockScreen: GenLockScreen() {
var triggerOnUnlock: (() -> Unit)? = null
override fun initComponent() {
val draggable = StraightDraggableLabel(gui_Unlocker)
replace(gui_Unlocker, draggable, null)
gui_Unlocker = draggable
gui_Unlocker.preferredSize = Dimension(gui_UnlockTarget.preferredW, gui_SlideArea.height)
revalidate()
// dragging
draggable.apply {
isVDragEnabled = false
dragMinX = draggable.x
dragMaxX = gui_SlideArea.x + gui_SlideArea.width
}
gui_UnlockTarget.isDropTarget = true
gui_Unlocker.isDraggable = true
gui_Unlocker.addDragOverListener {
val overlap = (gui_Unlocker.draggedx + gui_Unlocker.width) - gui_UnlockTarget.x
val overlapRatio = overlap / gui_Unlocker.width.toDouble()
if(overlapRatio >= 0.75) triggerOnUnlock?.invoke()
}
}
}
class StraightDraggableLabel(var isHDragEnabled: Boolean = true, var isVDragEnabled: Boolean = true): Label() {
var dragMinX = Int.MIN_VALUE
var dragMaxX = Int.MAX_VALUE
var dragMinY = Int.MIN_VALUE
var dragMaxY = Int.MAX_VALUE
constructor(label: Label): this() {
uiid = label.uiid
text = label.text
icon = label.icon
}
override fun getDragImage() = toImage()!!
override fun drawDraggedImage(g: Graphics, img: Image, x: Int, y: Int) {
//super.drawDraggedImage(g, img, x, y)
val dX = if(isHDragEnabled) MathUtils.clamp(dragMinX, dragMaxX - img.width, x) else this.x
val dY = if(isVDragEnabled) MathUtils.clamp(dragMinY, dragMaxY - img.height, y) else this.y
g.drawImage(img, dX, dY)
}
}
我省略了设计器特定的文件/类。
拖动的绿色组件由 css 设置样式:
LockScreenUnlocker {
background-color: #00a87f;
border-radius: 2mm;
text-align: center;
color: white;
font-size: large;
padding: 0;
margin: 0;
}
解决方案
推荐阅读
- python - 为什么我只需要从模块导入子类而不从另一个实例导入它的基类和它的属性?
- api - 我们如何测试使用 azure 持久函数的 rest api 端点?
- html - 无法发布用 MD 文件写入的表格
- css - 我想用 sass 将图标悬停为白色(没有过滤器)
- gremlin - Tinkerpop 选择按顶点分组的邻居,它们是具有范围步长的邻居
- android - 如何在第三方活动上添加进度条
- python - Heroku 无法安装 av (pyav)
- ruby-on-rails - Rails:如何使用 Apipie gem 使用查询参数创建创建 api 的文档
- linux - linux-headers-$(uname -r) 安装程序,但 /usr/include/ 未使用新标头更新
- c# - 微软交换。如何连接到指定的数据库?