Android Kotlin 实现 TextView 控件拖动:完整指南
要在整个页面上拖动 TextView 控件的位置,可以使用 Android 的触摸事件来实现。
首先,在布局文件中添加一个 TextView 控件,并设置它的初始位置和大小:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/draggable_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Drag me"
android:background="@android:color/holo_blue_dark"
android:textColor="@android:color/white"
android:padding="16dp"
android:layout_marginLeft="100dp"
android:layout_marginTop="100dp"/>
</RelativeLayout>
然后,在 Activity 中获取 TextView 控件,并为它设置触摸事件监听器:
class MainActivity : AppCompatActivity() {
private lateinit var draggableTextView: TextView
private var xDelta: Int = 0
private var yDelta: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
draggableTextView = findViewById(R.id.draggable_textview)
draggableTextView.setOnTouchListener { view, event ->
val x = event.rawX.toInt()
val y = event.rawY.toInt()
when (event.action and MotionEvent.ACTION_MASK) {
MotionEvent.ACTION_DOWN -> {
val layoutParams = view.layoutParams as RelativeLayout.LayoutParams
xDelta = x - layoutParams.leftMargin
yDelta = y - layoutParams.topMargin
}
MotionEvent.ACTION_MOVE -> {
val layoutParams = view.layoutParams as RelativeLayout.LayoutParams
layoutParams.leftMargin = x - xDelta
layoutParams.topMargin = y - yDelta
view.layoutParams = layoutParams
}
}
true
}
}
}
在触摸事件监听器中,我们首先获取触摸点的坐标。当按下时,我们计算出 TextView 控件的左上角到触摸点的偏移量(xDelta 和 yDelta)。然后,在移动过程中,我们更新 TextView 控件的布局参数,将其左上角的位置设置为触摸点的坐标减去偏移量。最后,我们将更新后的布局参数应用到 TextView 控件上。
这样,当用户按住 TextView 控件并移动手指时,TextView 控件会跟随手指的移动而改变位置。
原文地址: https://www.cveoy.top/t/topic/mrRS 著作权归作者所有。请勿转载和采集!