You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Android:如何通过手指从元素当前位置拖动避免跳转零点

问题修复方案

核心问题原因

  • 你将触摸监听绑定在根布局main_page上,ACTION_DOWN回调中的view参数指向的是main_page本身,不是你要移动的button,所以计算出的偏移量y完全错误,导致每次滑动时按钮位置计算偏差出现跳转。
  • 可空Double类型、零时长动画属于不必要的冗余代码,可以简化。

修复后代码

直接给目标按钮设置触摸监听逻辑更直观,代码如下:

// 存储手指在按钮上的Y轴偏移量
var offsetY: Float = 0f

button.setOnTouchListener { _, event ->
    when (event.action) {
        MotionEvent.ACTION_DOWN -> {
            // 计算手指按下位置相对于按钮顶部的偏移量
            offsetY = button.y - event.rawY
            true
        }
        MotionEvent.ACTION_MOVE -> {
            // 直接更新按钮位置即可,无需使用零时长动画
            button.y = event.rawY + offsetY
            true
        }
        else -> true
    }
}

可选调整

如果你需要保留根布局的触摸监听,仅需要把ACTION_DOWN逻辑里的view.y替换为button.y即可,其余逻辑不变;如果需要同时支持X轴移动,按照相同逻辑计算offsetX更新button.x即可。

内容的提问来源于stack exchange,提问作者Szomti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:45:03