public AsymmetricGridView(final Context context, final AttributeSet attrs) { super(context, attrs); defaultPadding = Utils.dpToPx(context, 5); requestedHorizontalSpacing = defaultPadding; requestedVerticalSpacing = defaultPadding; padding = new Rect(defaultPadding, defaultPadding, defaultPadding, defaultPadding); final ViewTreeObserver vto = getViewTreeObserver(); if (vto != null) vto.addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { getViewTreeObserver().removeOnPreDrawListener(this); determineColumns(); if (gridAdapter != null) gridAdapter.notifyDataSetChanged(); return false; } }); }