【问题标题】:Get on Screen Position of Objects in OnCreate()在 OnCreate() 中获取对象的屏幕位置
【发布时间】:2016-04-01 00:14:57
【问题描述】:

我面临以下问题: 我在屏幕上有 4 个按钮,可以在放下按钮时将其拖动并移回原来的位置。

为此,我想通过使用 getX() 和 getY() 函数读出按钮的特定位置(在特定设备上)并将结果写入数组。

buttons[0][0] = button.getX();
buttons[0][1] = button.getY();

由于我无法在 onCreate 或 onStart 中使用这些函数(位置始终为 (0,0),因为视图尚未实例化,但我正在考虑如何在不进行任何额外编码的情况下读出原始位置。

非常感谢

【问题讨论】:

    标签: android positioning frontend


    【解决方案1】:

    在您的onCreate 中——尽管onResume 可能更有意义——获取对作为所有按钮祖先的视图的引用(或者只是活动的根,这可能是最简单的),然后执行此操作:

    rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
        rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    
        // Read values here.
        buttons[0][0] = button.getX();
        buttons[0][1] = button.getY();
      }
    });
    

    【讨论】:

    • 像魅力一样工作! :)
    【解决方案2】:

    不确定您所说的“额外编码”是什么意思,但您可以使用OnTouchListener(或修改您已经在使用的那个,如果是这种情况)在他们触摸按钮后立即捕获位置,但是在他们将它拖到任何地方之前(我认为那将是ACTION_DOWN)。

    这具有仅在您需要时设置它的优点,当它们实际上不拖动按钮时跳过它,并且不为每个布局传递调用它,等等。

    【讨论】:

    • 这实际上是我所说的“额外编码”,但也非常感谢您的反馈!一旦我获得 15 个声望,我就会投票给你。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2019-02-06
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多