我面临以下问题: 我在屏幕上有4个按钮,可以拖动按钮,然后在按下按钮时移回原位。
为此,我想通过使用getX()和getY()函数并将结果写入数组来读出按钮的特定位置(在特定设备上)。
buttons[0][0] = button.getX();
buttons[0][1] = button.getY();
由于我无法在onCreate或onStart中使用这些函数(位置始终为(0,0)因为视图未实例化但我正在考虑如何在没有任何额外编码的情况下读出原始位置。< / p>
非常感谢
答案 0 :(得分:2)
在你的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();
}
});
答案 1 :(得分:1)
不确定你的“额外编码”是什么意思,但你可以使用OnTouchListener(或修改你已经使用的那个,如果是这种情况),一旦他们触摸按钮就捕获位置,但在将它拖到任何地方之前(我认为那将是ACTION_DOWN)。
这样做的好处是只在需要时设置,在实际不拖动按钮时跳过它,而不是为每个布局传递调用它等等。