kotlinでAndroidアプリ作成しており、マッピングアプリを作成しようと思っています。
そこで、ボタンを押してテキストを追加生成したら、そのテキストを移動できるようにしたいと思っています。
テキストの追加と移動はできているのですが、ボタンを押してテキスト生成すると全てのテキスト位置が元に戻ってしまいます。
どうすればボタンを押してもテキストがその位置を維持した状態になりますか?
MainActivity.kt
1import android.os.Bundle 2import android.view.MotionEvent 3import android.view.View 4import android.widget.TextView 5import androidx.appcompat.app.AppCompatActivity 6import com.example.mapping.databinding.ActivityMainBinding 7 8class MainActivity : AppCompatActivity(), View.OnTouchListener{ 9 private lateinit var binding: ActivityMainBinding 10 private var mappingText1 = "abc" 11 private var oldX = 0F 12 private var oldY = 0F 13 private var addId = 1 14 private lateinit var addItems: TextView 15 16 //生成されるテキスト 17 private fun getTextView(addId: Int): TextView { 18 addItems = TextView(this).apply { 19 id = addId 20 text = id.toString() 21 textSize = 50F 22 } 23 return addItems 24 } 25 26 override fun onCreate(savedInstanceState: Bundle?) { 27 super.onCreate(savedInstanceState) 28 binding = ActivityMainBinding.inflate(layoutInflater) 29 val view = binding.root 30 setContentView(view) 31 32 //ボタンを押してテキスト追加 33 binding.button.setOnClickListener{ 34 //テキスト追加時にviewに個別のidを設定 35 binding.constraint.addView(getTextView(addId)) 36 //追加したviewをaddItemsとして、リスナを設定 37 addItems.setOnTouchListener(this) 38 //ボタンを押した後、idの値をプラスしておく 39 addId++ 40 } 41 } 42 43 override fun onTouch(v: View, event: MotionEvent): Boolean { 44 var newX = event.x 45 var newY = event.y 46 47 when (event.action) { 48 MotionEvent.ACTION_MOVE -> { 49 var leftF = v.left + (newX - oldX) 50 var topF = v.top + (newY - oldY) 51 var left = leftF.toInt() 52 var top = topF.toInt() 53 54 v.layout(left, top, left + v.width, top + v.height) 55 return true 56 } 57 } 58 oldX = newX 59 oldY = newY 60 61 return true 62 }
activity_main.xml
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:app="http://schemas.android.com/apk/res-auto" 6 android:id="@+id/constraint" 7 android:layout_width="match_parent" 8 android:layout_height="match_parent" 9 tools:context=".MainActivity"> 10 <Button 11 android:id="@+id/button" 12 android:text="テキスト追加" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 app:layout_constraintStart_toStartOf="parent" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintBottom_toBottomOf="parent" 18 /> 19</androidx.constraintlayout.widget.ConstraintLayout>

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/01 07:02