Getting 0 Value for both X and Y Coordinate of view(Imagebutton) in android

前端 未结 4 1396
失恋的感觉
失恋的感觉 2021-01-01 05:46

I want to get X and Y Point of View(ImageButton).

When I try to find X and Y on Click event with below code I get proper X and Y coordinate for View.



        
相关标签:
4条回答
  • 2021-01-01 06:14

    post() gets called after setContentView().

    Method setContentView() ends up in callingViewGroup.addView() of the top view, andaddView() call always triggers requestLayout(). In turn, requestLayout() posts a task to the main thread to be executed later. This task will execute measure and layout on the view hierarchy. Now if you post another task it will be put into the queue afterlayout task and, as the result, always executed aftermeasure and layout happen. Thus you will always have valid sizes.

    Taken from https://stackoverflow.com/a/21938380

    button.post(new Runnable() {
        @Override
        public void run() {
            // get coordinates
        }
    });
    
    0 讨论(0)
  • 2021-01-01 06:22

    Two options:

    • Implementing your logics in onResume.
    • Using ViewTreeObserver.

      final ViewTreeObserver vto = findViewById(R.id.YOUR_VIEW_ID).getViewTreeObserver(); 
      vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
          @Override 
          public void onGlobalLayout() { 
              vto.removeOnGlobalLayoutListener(this);  
      
              // Get X, Y of the ImageView here
          } 
      });
      
    0 讨论(0)
  • 2021-01-01 06:32

    the reason the returned value is zero is because the ImageButton is not yet created if you call this method in 'onCreate()'. You can use the ViewTreeObserver to get the position:

    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);  
    
        } 
    });
    

    Happy coding

    0 讨论(0)
  • 2021-01-01 06:32

    Get the values on onWindowFocusChanged().

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    
        ImageButton imagebutton = (ImageButton) findViewById(R.id.imagebutton);
        int[] posXY = new int[2];
        imagebutton.getLocationInWindow(posXY);
        int x = posXY[0];
        int y = posXY[1];
    
        Log.d("X and Y Point", x + " " + y);
    }
    
    0 讨论(0)
提交回复
热议问题