2013-10-21 10 views
12

ImageViewの位置をプログラムで取得したいとします。位置によって、私は画面の上からピクセルの距離を意味するImageView.私は他のすべてのソリューションをstackoverflowで投稿しようとしましたが、それは私のために働いていません。マイ最小APIレベルは、これらのビューがレイアウトされた後、私はtried-ImageViewの位置をプログラムに基づいて画面に相対的に取得します

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()だけを持っているコードです8.

です。 getTop()getLeft()getBottom()、およびgetRight()は、その親に対する相対位置を返します。

+1

私はこれらを使用しました。彼らはすべて0を返します。私は理由を知らない。 – Naddy

+0

あなたはonCreate()でこれらのメソッドを呼び出すべきではありません、onWindowFocusChanged()を試してみてください –

関連する問題