【问题标题】:PopupWindow wrong Y positionPopupWindow Y 位置错误
【发布时间】:2021-04-25 12:26:11
【问题描述】:

我想在用户点击屏幕的位置显示弹窗,我使用函数-showAtLocation (mainView, Gravity.TOP or Gravity.START, posX, posY),x坐标一切正常,但是弹窗的Y坐标比那个位置高用户点击的地方,如果主视图(mainView)被滚动,那么弹出窗口通常会飞到最底部,我就是不知道 Y 位置有什么问题。 posX 和 posY 是用户触摸屏幕的位置

更新

override fun dispatchTouchEvent(event: MotionEvent): Boolean {    
    posY = event.y.toInt()
    return super.dispatchTouchEvent(event)
}

【问题讨论】:

  • 能否请您显示代码以获取弹出窗口的 Y 坐标?
  • 我更新了答案

标签: android android-popupwindow


【解决方案1】:

感谢您更新问题!

我认为showAtLocation() 使用总坐标,从屏幕左上方开始。但是(没有看到你的代码的完整上下文)我认为你正在为 x 和 y 坐标取相对坐标。

如果您覆盖函数 dispatchTouchEvent() 的视图组具有例如 24dp 顶部边距,则此视图的 (0;0) 坐标位于全局 (0;0) 坐标下方 24dp。因此,当您按下视图组的左上角时,event.y.toInt() 将返回 (0;0),您将返回 0 作为 posY。但是您的点击比屏幕上的总 0 坐标低 24dp。所以你会显示弹出窗口 24dp 太高了。

当您在 mainView 中向下滚动时也会发生同样的情况。你的屏幕是例如1000px 高,向下滚动两倍的屏幕长度。 event.y.toInt() 现在可以返回 2000px 作为相对 y 坐标。但最高屏幕高度为 1000 像素,因此即使您在屏幕中间单击,弹出窗口也会显示在屏幕底部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2020-10-12
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多