要在整个页面上拖动 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 控件会跟随手指的移动而改变位置。

Android Kotlin 实现 TextView 控件拖动:完整指南

原文地址: https://www.cveoy.top/t/topic/mrRS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录