2013-10-21 123 views
12

我想以編程方式獲得我的ImageView的位置。通過位置,我的意思是從屏幕頂部到像素的距離ImageView.我已經嘗試了所有其他解決方案發布在stackoverflow中,但它不適合我。我的最低API等級爲8以編程方式獲取ImageView相對於屏幕的位置

這些代碼我有tried-

ImageView image = (ImageView) findViewById(R.id.imageView1); 
1) image.getTop(); 

2) private int getRelativeTop(View myView) { 
    if (myView.getParent() == myView.getRootView()) 
     return myView.getTop(); 
    else 
     return myView.getTop() + getRelativeTop((View) myView.getParent()); 
} 

3) image.getLocationOnScreen(int[] locaiton); 
+1

你可以添加一些你試過的代碼嗎? – Carnal

+0

@Carnal我已添加代碼。 – Naddy

+0

太棒了,你使用這些方法onCreate? – Carnal

回答

40

當佈局與子視圖一起放置時,您需要等待回調。這是您需要添加到根視圖以便計算圖像座標的偵聽器。否則它將返回0.

getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     getViewTreeObserver().removeGlobalOnLayoutListener(this); 

     int[] locations = new int[2]; 
     image.getLocationOnScreen(locations); 
     int x = locations[0]; 
     int y = locations[1]; 
    } 
}); 
+1

真棒答案! – Naddy

+0

非常感謝您的回答,您節省了我的時間..! –

+0

驚人的,它的作品完美! –

6

使用View.getLocationOnScreen()getLocationInWindow()但只有的觀點一直佈局之後。 getTop(),getLeft(),getBottom()getRight()返回相對於其父母的位置。

+1

我已經使用過這些。他們都返回0.我不知道爲什麼。 – Naddy

+0

你不應該在onCreate()中調用這些方法,試試onWindowFocusChanged() –

相關問題