【问题标题】:how to get view's position in coordinates?如何获取视图在坐标中的位置?
【发布时间】:2015-11-04 13:02:33
【问题描述】:

您好,我在 RelativeLayout 中有一个 ImageView,现在如何在屏幕上获取 imageview 的 X 和 Y 位置?

我试过了

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

但它们都返回 0。

将图像视图设置为居中后调用上述函数

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

【问题讨论】:

    标签: android imageview android-relativelayout


    【解决方案1】:

    View Tree Observer 回调将在视图呈现在屏幕上后被调用。由于视图/布局尚未渲染,上述方法将始终产生 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】:

      试试这个

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

      单击图像视图将在 logcat 中打印视图的可视 Y 位置。

      【讨论】:

      • @winchester 很高兴我能帮上忙 :)
      【解决方案3】:

      试试这个:

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

      【讨论】:

      • mPhoto 是通过编程方式添加到视图中还是在 xml 中定义?
      • 在 xml 中定义但以编程方式设置图像资源
      【解决方案4】:

      它还没有被测量,所以我使用了以下 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();
      
          } 
      });
      

      【讨论】:

        猜你喜欢
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 2017-04-18
        • 2012-08-12
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多