Android经典实战之如何获取View和ViewGroup的中心点

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在 Android 中,要获取 ViewViewGroup 的中心点(即中心坐标),可以通过以下步骤完成。

获取 View 中心点

View 的中心点可以通过获取其左上角坐标和宽高计算得出。

val view = findViewById<View>(R.id.your_view_id)

// 获取 View 的左上角位置
val x = view.left
val y = view.top

// 获取 View 的宽度和高度
val width = view.width
val height = view.height

// 计算中心点
val centerX = x + width / 2
val centerY = y + height / 2

println("View Center: ($centerX, $centerY)")

获取 ViewGroup 中心点

ViewGroup 也是一种 View,所以获取中心点的方法与 View 类似。

val viewGroup = findViewById<ViewGroup>(R.id.your_viewgroup_id)

// 获取 ViewGroup 的左上角位置
val x = viewGroup.left
val y = viewGroup.top

// 获取 ViewGroup 的宽度和高度
val width = viewGroup.width
val height = viewGroup.height

// 计算中心点
val centerX = x + width / 2
val centerY = y + height / 2

println("ViewGroup Center: ($centerX, $centerY)")

注意事项

1、 View 的测量过程:如果你在 onCreateonViewCreated 方法中立即获取视图中心点,这时视图可能尚未完成测量,宽高可能为 0。为了确保视图已经完成测量,可以使用 ViewTreeObserver.OnGlobalLayoutListenerpost 方法。

 val view = findViewById<View>(R.id.your_view_id)

 view.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
     override fun onGlobalLayout() {
         view.viewTreeObserver.removeOnGlobalLayoutListener(this)

         // 获取中心点
         val centerX = view.left + view.width / 2
         val centerY = view.top + view.height / 2

         println("View Center: ($centerX, $centerY)")
     }
 })

或者

 val view = findViewById<View>(R.id.your_view_id)

 view.post {
     // 获取中心点
     val centerX = view.left + view.width / 2
     val centerY = view.top + view.height / 2

     println("View Center: ($centerX, $centerY)")
 }

2、 绝对坐标和相对坐标:上述方法获取的是相对于父容器的坐标。如果你需要屏幕上的绝对坐标,可以使用 getLocationOnScreengetLocationInWindow 方法。

 val view = findViewById<View>(R.id.your_view_id)
 val location = IntArray(2)

 // 获取屏幕上的绝对位置
 view.getLocationOnScreen(location)
 val x = location[0]
 val y = location[1]

 // 计算中心点
 val centerX = x + view.width / 2
 val centerY = y + view.height / 2

 println("Absolute View Center: ($centerX, $centerY)")

通过这些方法,你可以准确获取 ViewViewGroup 的中心点,从而进行后续计算或操作。


欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值