how to get view's position in coordinates?

限于喜欢 提交于 2019-12-13 14:27:10

问题


Hi I have an ImageView inside RelativeLayout, now how can I get X and Y position of imageview on screen ?

I have tried

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

but all of them returns 0.

Above functions are called after progmatically setting imageview to center

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

回答1:


View Tree Observer callback will be called after the view has been rendered on screen. Above methods will always yield 0 as view/layout has not been rendered yet.

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:


Try this

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

Clicking the image view will print visual Y position of view in logcat.




回答3:


try this :

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



回答4:


It was not yet measured so I used following 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();

    } 
});


来源:https://stackoverflow.com/questions/33522669/how-to-get-views-position-in-coordinates

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!