在Android中获取X和Y坐标视图(Imagebutton)的值

Pri*_*nce 2 android android-layout android-view android-imagebutton

我想得到X和Y的观点(ImageButton).

当我尝试使用下面的代码在Click事件上找到X和Y时,我得到View的正确X和Y坐标.

    ImageButton imagebutton = findviewbyId(R.id.imagebutton);                       
    imagebutton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            int[] posXY = new int[2];
            v.getLocationOnScreen(posXY);
            x = posXY[0];
            y = posXY[1];

            Log.d("X and Y Point", x + " " + y);        
        }
    });
Run Code Online (Sandbox Code Playgroud)

但是在点击视图之前我想要X和Y坐标,所以我尝试用下面的代码得到X和Y.

    ImageButton imagebutton = findviewbyId(R.id.imagebutton);                       
    int[] posXY = new int[2];
    imageButton.getLocationOnScreen(posXY);
    x = posXY[0];
    y = posXY[1];

    Log.d("X and Y Point", x + " " + y);
Run Code Online (Sandbox Code Playgroud)

但每当我尝试使用ClickListener获取X和Y时,我得到X和Y为0和0.因此,如果没有ClickListener,我不会得到Proper X和Y. 任何人都可以帮助解决什么是实际问题,如何在没有ClickListener的情况下获得Proper X和Y?

Jon*_*eff 5

返回值为零的原因是因为如果在'onCreate()'中调用此方法,则尚未创建ImageButton.您可以使用ViewTreeObserver获取位置:

ViewTreeObserver vto = imagebutton.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        this.imagebutton.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

        int[] posXY = new int[2];

        imagebutton.getLocationOnScreen(posXY);
        x = posXY[0];
        y = posXY[1];

        Log.d("X and Y Point", x + " " + y);  

    } 
});
Run Code Online (Sandbox Code Playgroud)

快乐的编码