这是一种无需扩展或覆盖任何东西的方法:
private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable)
{
final ViewTreeObserver vto = view.getViewTreeObserver();
final OnPreDrawListener preDrawListener = new OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
runnable.run();
final ViewTreeObserver vto = view.getViewTreeObserver();
vto.removeOnPreDrawListener(this);
return true;
}
};
vto.addOnPreDrawListener(preDrawListener);
}
在 runnable 参数中,您可以获得更新后的大小和位置以及您需要的所有其他内容。
或者,如果您愿意,您可以使用addOnGlobalLayoutListener
而不是。addOnPreDrawListener
编辑:替代 runJustBeforeBeingDrawn:https ://stackoverflow.com/a/28136027/878126