Android Studio Как расположить представление в центре кадра с помощью кодаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Studio Как расположить представление в центре кадра с помощью кода

Сообщение Anonymous »

Я пытаюсь решить проблему, которая останавливает мою разработку.
Я хочу расположить изображение так, чтобы оно находилось в центре макета кадра, с помощью кода.
Я пробовал различные решения, но, похоже, не смог достичь своей цели.
Код
package com.example.testmovingobject

import android.content.Context
import android.os.Bundle
import android.util.DisplayMetrics
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

private lateinit var star: ImageView
lateinit var directionText: TextView
lateinit var background: ImageView
lateinit var outMetrics : DisplayMetrics
lateinit var context: Context

private val testDirections = arrayOf(
"North",
"South",
"East",
"West",
"North",
"South",
"East",
"West"
)
private var topBorderHeight = 50f
private var startX : Float = 0f
private var startY : Float = 0f
private var height = 13f
private var width = 7f
private var left = 0f
private var top = 0f
private var screenHeight = 0f
private var screenWidth = 0f
private var backgroundPos = IntArray(2)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
context = getApplicationContext()
setContentView(R.layout.main)

Start()
}

private fun Start()
{
outMetrics = context.resources.displayMetrics
screenHeight = outMetrics.heightPixels.toFloat()
println("Start.metrics height="+screenHeight)
screenWidth = outMetrics.widthPixels.toFloat()
println("Start.metrics width="+screenWidth)
background = findViewById(R.id.background)
println("Start.background size="+background.getWidth()+" "+background.getHeight())
star = findViewById(R.id.star)
star.setBackgroundResource(R.drawable.star)
println("Start.star parent="+star.parent)
println("Start.star pos b4 x="+star.x+" star pos y="+star.y )

background.getLocationOnScreen(backgroundPos)
println("Start.background pos x="+backgroundPos[0]+" pos y="+backgroundPos[1])

directionText = findViewById(R.id.messages)
height = background.getHeight().toFloat()
println("Start.background height="+height)
width = background.getWidth().toFloat()
println("Start.background width="+width)
left = backgroundPos[0].toFloat()
top = backgroundPos[1].toFloat()
println("Start.background bounds left="+left+" top="+top+" width="+width+" height="+height)
println("Start.star pos b4 x="+star.x+" star pos y="+star.y )
startX = width / 2
startY = height / 2
star.x = startX
star.y = startY
println("Start.star pos aftr x="+star.x+" star pos y="+star.y )
println("Start.bounds left="+left+" top="+top+" width="+width+" height="+height)
}

}

XML




















Снимок экрана при запуске
На этом изображении показан вид некоторых XML-файлов и эмулятора устройства, и видно, что объект-звездочка не расположен в центре.
Вывод Logcat из printlns
-------------- PROCESS STARTED (5791) for package com.example.testmovingobject ----------------------------
2026-02-19 06:56:45.282 Start.metrics height=2028.0
2026-02-19 06:56:45.283 Start.metrics width=1080.0
2026-02-19 06:56:45.283 Start.background size=0 0
2026-02-19 06:56:45.283 Start.star parent=android.widget.FrameLayout{7f6878b V.E...... ......I. 0,0-0,0 #7f0800c8 app:id/frame}
2026-02-19 06:56:45.283 Start.star pos b4 x=0.0 star pos y=0.0
2026-02-19 06:56:45.283 Start.background pos x=0 pos y=0
2026-02-19 06:56:45.283 Start.background height=0.0
2026-02-19 06:56:45.283 Start.background width=0.0
2026-02-19 06:56:45.283 Start.background bounds left=0.0 top=0.0 width=0.0 height=0.0
2026-02-19 06:56:45.283 Start.star pos b4 x=0.0 star pos y=0.0
2026-02-19 06:56:45.283 Start.star pos aftr x=0.0 star pos y=0.0
2026-02-19 06:56:45.283 Start.bounds left=0.0 top=0.0 width=0.0 height=0.0
---------------- PROCESS ENDED (5791) for package com.example.testmovingobject ----------------------------


Подробнее здесь: https://stackoverflow.com/questions/798 ... using-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»