基于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
如何获取以像素为单位的视图宽度?
答案 0 :(得分:0)
我假设您在RecyclerView.Apadter或类似的地方添加OnPreDrawListener?
如果不直接删除侦听器,则会多次调用 onPreDraw
。因此,请等到View的宽度为正,然后再删除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
}
}