[英]android .getTop() returns 0.0
我正在開發一個 android 鎖屏應用程序。 我從另一個線程中得到了想法,以檢查手指按下位置的坐標與我設置的圖像按鈕的坐標。
我正在嘗試使用.getTop()
和.getLeft()
獲取圖像按鈕的坐標,但兩者都返回 0.0(因為它們是浮點數,而不是整數)。
這是為什么? 我是 android 開發的新手,如果我遺漏了一些明顯的東西,我很抱歉。
另外,我在某處讀到.getTop()
在setContentView(R.layout.layoutname)
之后將無法工作,但如果我將它放在setContentView(...)
之上,那么應用程序就會崩潰。
有沒有另一種方法來獲取圖像按鈕的坐標,或者獲取表格單元格的坐標和邊界會更好/更容易嗎? 我該怎么做?
提前致謝 :)
您需要將視圖添加到布局並顯示(必須至少運行一次布局傳遞和測量傳遞。)。 此外,如此獲得的坐標是相對於視圖的直接父級的。
可以通過調用方法 getLeft() 和 getTop() 來檢索視圖的位置。 前者返回表示視圖的矩形的左坐標或 X 坐標。 后者返回表示視圖的矩形的頂部坐標或 Y 坐標。 這些方法都返回視圖相對於其父視圖的位置。 例如,當 getLeft() 返回 20 時,這意味着視圖位於其直接父級左邊緣右側 20 像素處。
imagebutton.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
在 imagebutton.getTop() 之前試試這個?
我在從onCreateView()
或onViewCreated()
調用.getTop()
時遇到了這個問題。 在這種狀態下,尚未繪制視圖,因此尚不知道實際坐標。
一種解決方法是使用處理程序在以下 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();
});
}
這應該可以完成工作;)
// 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));`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.