如何在android中获取视图的x,y坐标?

时间:2013-07-10 10:58:18

标签: android

我使用以下代码来获取布局中视图的位置(x,y)坐标。我有一个按钮和以下代码来获取它在scren上的位置。但是当它使用时强制关闭应用程序这段代码。另请注意,此语句已在setContentView()之后调用。以下是代码

Toast.makeText(MainActivity.this, button1.getTop(),Toast.LENGTH_LONG).show();

以下是错误:

 E/AndroidRuntime(11630): android.content.res.Resources$NotFoundException: String resource ID #0x196

。如何在屏幕上显示视图(例如我的情况下是一个按钮)(x,y坐标)?

3 个答案:

答案 0 :(得分:4)

您使用的方法期望整数值作为R.string.whatever的引用。将getTop()返回值转换为String应该可以工作。

Toast.makeText(MainActivity.this, String.valueOf(button1.getTop()), Toast.LENGTH_LONG).show();

获取按钮的x / y(自API 11起):

Toast.makeText(MainActivity.this, (int)button1.getX() + ":" + (int)button1.getY(), Toast.LENGTH_LONG).show();

Doc

  

此视图的可视x位置(以像素为单位)。

对于低于11的API,您的方法是正确的:getTop()相当于getY(),但没有可能的动画/翻译。 getLeft()是具有相同限制的getX()的等价物。

答案 1 :(得分:0)

button1.getTop()返回一个int号,Toast.makeText()将该int号视为字符串资源id,实际上并不存在,因此崩溃。

尝试使用button1.getTop() + ""更改为字符串。

答案 2 :(得分:0)

前提条件:存在MyButton引用

AtomicInteger leftButton = new AtomicInteger();
myButton.getViewTreeObserver().addOnGlobalLayoutListener(
    () -> {
        if (leftButton.get() == 0) {
            leftSubtitle.set(myButton.getLeft());

            //do something once you get the value..
        }
    }
);