我正在开发一个Android锁屏应用程序。我从另一个线程中得到了一个想法,检查手指按下的坐标与我设置的图像按钮的坐标。
我正在尝试使用.getTop()
和.getLeft()
来获取图像按钮的坐标,但两者都返回0.0(因为它们是浮点数,而不是int)。
此外,我在某处读到.getTop()
在setContentView(R.layout.layoutname)
之后无效,但如果我将其置于setContentView(...)
之上,则应用程序崩溃。
是否有其他方法可以获取图像按钮的坐标,还是更好/更容易获得表格单元格的坐标和边界?我该怎么做?
提前致谢:)
答案 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));`