뭐 개발 방법은 만드는 사람마다 다 틀린거니 제가 정형화된 답은 드릴 수가 없네요.
몇가지 방법만 말씀드리자면..
물론 겹치치 않게 배치게 되려면 리니어 레이아웃을 사용하셔야하구요.
리니어 레이아웃 같은 경우 가로, 세로에 layout_weight 으로 가중치를 줘서 표현이 가능하니 이걸 사용하셔도 되구요.
특정 크기 미리 정의 해놓으셨다면 동적으로 addView 하실때 해당 크기를 랜덤하게 가져와서 width, height 에 적용되도록 하셔도 되구요.
설명이 부족하거나 이해가 잘 안되시면 말씀해주세요.