просмотр Android getWidth () возвращает 0 даже в onPreDraw () - PullRequest
0 голосов
/ 28 августа 2018

На основании ответов в SOF, например this

Я попытался измерить представление достаточно поздно (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

как узнать ширину вида в пикселях?

1 Ответ

0 голосов
/ 20 мая 2019

Я предполагаю, что вы добавляете OnPreDrawListener где-то в RecyclerView.Apadter или что-то подобное?

onPreDraw будет вызываться несколько раз, если вы не удалите слушателя напрямую. Поэтому подождите, пока у вашего представления будет положительная ширина, а затем удалите OnPreDrawListener.

@Override
public boolean onPreDraw() {
      // imageView might not be drawn yet..
      if (myAccountView.getWidth() < 1) {
           return true;
      } else {
         viewTreeObserver.removeOnPreDrawListener(this);

         //..you can do all your calculation here

         //..and afterwards return
         return true
      }
}
...