1

根据 SOF 中的答案,像这样

onPreDraw与上述问题链接中的问题开启者不同,我已经尝试过足够晚的时间来衡量观点( )。

我有这个代码:

ViewTreeObserver viewTreeObserver = myAccountView.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(
    new OnPreDrawListener() {

      @Override
      public boolean onPreDraw() {

        if (viewTreeObserver.isAlive()) {
          viewTreeObserver.removeOnPreDrawListener(this);
        }

        int measuredWidth = myAccountView.getMeasuredWidth();
        int width = myAccountView.getWidth();

        return true;
      }
    });

}

尽管如此,measuredWidth并且width始终为 0

如何获取视图的宽度(以像素为单位)?

4

1 回答 1

0

我假设您在 RecyclerView.Apadter 或类似的地方添加了 OnPreDrawListener?

onPreDraw如果您不直接删除侦听器,将被多次调用。因此,等到您的视图具有正宽度,然后删除 OnPreDrawListener。

@Override
public boolean onPreDraw() {
      if (myAccountView.getWidth() < 1) {
          // imageView might not be drawn yet
      } else {
         viewTreeObserver.removeOnPreDrawListener(this);
      
         // you can do all your calculation here
      }

      return true;
}
于 2019-05-20T16:33:31.097 回答