2015-11-04 31 views
3

嗨我有一個ImageView裏面的RelativeLayout,現在我怎麼能得到X和Y的imageview在屏幕上的位置?如何在座標中獲取視圖的位置?

我已經試過

getLocationOnScreen 
log(mPhoto.getLeft()); 
log(mPhoto.getScrollX()); 
log(mPhoto.getX()); 
log(mPhoto.getTranslationX()); 

但他們都返回0

上述功能之後progmatically設置的ImageView被稱爲居中

RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(mFaceWidth, mFaceHeight); 
    lp1.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    lp1.addRule(RelativeLayout.CENTER_VERTICAL); 
    mPhoto.setLayoutParams(lp1); 
    mPhoto.requestLayout(); 

回答

4

景觀樹觀察員回調的觀點已經呈現在屏幕上後,將被調用。由於視圖/佈局尚未呈現,因此以上方法始終會產生0。

ViewTreeObserver vto=view.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ 
@Override public void onGlobalLayout(){ 
    int [] location = new int[2]; 
    view.getLocationOnScreen(location); 
    x = location[0]; 
    y = location[1]; 
    view.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

} 
} 
2

試試這個:

int [] location = new int[2]; 
view.getLocationOnScreen(location); 
x = location[0]; 
y = location[1]; 
+0

不工作還返回0 – winchester

+0

是mPhoto以編程方式添加到視圖或在xml中定義? – vaibhav

+0

在xml中定義,但以編程方式設置圖像資源 – winchester

3

試試這個

view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.i("trace", "Y: " + v.getY()); 
     } 
    }); 

單擊圖像視圖將在logcat中打印視覺Y視圖的位置。

+0

@winchester很高興我能幫忙:) –

0

這還沒有測量,所以我用以下 How can you tell when a layout has been drawn?

final LinearLayout layout = (LinearLayout)findViewById(R.id.YOUR_VIEW_ID); 
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     int width = layout.getMeasuredWidth(); 
     int height = layout.getMeasuredHeight(); 
     int x = layout.getX(); 
     int y = layout.getY(); 

    } 
});