android .getTop()返回0.0

时间:2014-01-08 09:31:20

标签: java android xml

我正在开发一个Android锁屏应用程序。我从另一个线程中得到了一个想法,检查手指按下的坐标与我设置的图像按钮的坐标。

我正在尝试使用.getTop().getLeft()来获取图像按钮的坐标,但两者都返回0.0(因为它们是浮点数,而不是int)。

这是为什么?我是android开发的新手,很抱歉,如果我遗漏了一些明显的东西。

此外,我在某处读到.getTop()setContentView(R.layout.layoutname)之后无效,但如果我将其置于setContentView(...)之上,则应用程序崩溃。

是否有其他方法可以获取图像按钮的坐标,还是更好/更容易获得表格单元格的坐标和边界?我该怎么做?

提前致谢:)

4 个答案:

答案 0 :(得分:4)

您需要将您的视图添加到布局并显示(必须至少运行一次布局传递和测量传递。)。此外,如此获得的坐标是相对于视图的直接父母。

  

可以通过调用来检索视图的位置   方法getLeft()和getTop()。前者返回左边,或者X,   表示视图的矩形的坐标。后者回归   表示视图的矩形的顶部或Y坐标。   这些方法都返回视图相对于它的位置   父即可。例如,当getLeft()返回20时,表示视图   位于其直接左边缘右侧20像素处   父节点。

答案 1 :(得分:2)

imagebutton.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);

在imagebutton.getTop()?

之前尝试一下

答案 2 :(得分:1)

我在从 .getTop()onCreateView() 调用 onViewCreated() 时遇到了这个问题。 在这种状态下,尚未绘制视图,因此尚不知道实际坐标。

一种解决方法是使用处理程序在以下 UI 循环中读取值:


int buttonTop;
int buttonLeft;

// ...

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    final ImageButton imageButton = view.findViewById(R.id.your_imagebutton_id);

    new Handler(Looper.getMainLooper()).post(() -> {
        buttonTop = imageButton.getTop(); 
        buttonLeft = imageButton.getLeft(); 
    });
}

答案 3 :(得分:-1)

这应该可以胜任;)

// Your view
ImageView image = (ImageView) findViewById(R.id.image);

Rect rect = new Rect();
image;getLocalVisibleRect(rect);
Log.d("WIDTH :",String.valueOf(rect.width()));
Log.d("HEIGHT :",String.valueOf(rect.height()));
Log.d("left :",String.valueOf(rect.left));
Log.d("right :",String.valueOf(rect.right));
Log.d("top :",String.valueOf(rect.top));
Log.d("bottom :",String.valueOf(rect.bottom));`