浏览代码

点击跟随,拖动跟随

xuxinyi 10 月之前
父节点
当前提交
b94a074b8d
共有 2 个文件被更改,包括 51 次插入10 次删除
  1. 45 1
      app/src/main/java/com/aplid/calculation/MainActivity.kt
  2. 6 9
      app/src/main/res/layout/activity_main.xml

+ 45 - 1
app/src/main/java/com/aplid/calculation/MainActivity.kt

@@ -1,12 +1,56 @@
 package com.aplid.calculation
 
 import android.os.Bundle
+import android.view.MotionEvent
+import android.widget.LinearLayout
+import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 
 class MainActivity : AppCompatActivity() {
+
+    private lateinit var moveTextView : TextView
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         supportActionBar?.hide()
         setContentView(R.layout.activity_main) // 绑定布局
+        moveTextView = findViewById(R.id.move)
+    }
+
+    // 处理触摸事件
+    override fun onTouchEvent(event: MotionEvent): Boolean {
+        when (event.action) {
+            MotionEvent.ACTION_DOWN -> {
+                // 触摸按下,记录触摸位置
+                moveTextView.isPressed = true
+                updatePosition(event)
+                return true // 消费事件
+            }
+            MotionEvent.ACTION_MOVE -> {
+                // 移动过程中更新位置
+                updatePosition(event)
+                return true // 消费事件
+            }
+            MotionEvent.ACTION_UP -> {
+                // 触摸抬起,结束操作
+                moveTextView.isPressed = false
+                return true // 消费事件
+            }
+            else -> return super.onTouchEvent(event)
+        }
+    }
+
+    // 更新 TextView 的位置
+    private fun updatePosition(event: MotionEvent) {
+        val x = event.x.toInt()
+        val y = event.y.toInt()
+        moveTextView.text = "($x,$y)"
+        val params = moveTextView.layoutParams
+        if (params is LinearLayout.LayoutParams) {
+            params.leftMargin = x - (moveTextView.width / 2)
+            params.topMargin = y - (moveTextView.height / 2)
+            moveTextView.layoutParams = params
+            moveTextView.requestLayout() // 强制刷新布局
+        }
     }
-}
+}

+ 6 - 9
app/src/main/res/layout/activity_main.xml

@@ -1,15 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    android:orientation="vertical">
 
     <TextView
+        android:id="@+id/move"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Hello World!"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-</androidx.constraintlayout.widget.ConstraintLayout>
+        android:layout_height="30dp" />
+
+</LinearLayout>