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;
            }
          });
  }