ConstraintLayout 1.1.0 で constraintCircle という制約が追加されていました。これはある起点に対して円形に制約を付与できるものなので, 円形のレイアウトが ConstraintLayout 1 枚で実現できるようになります。

真ん中の ImageView を中心にして周りに 8 つ配置した様子
上で言う中心の View にある周りの要素たちは, 以下を指定することでレイアウトが決まります。
- layout_constraintCircle で基準としたい View を指定
- layout_constraintAngle で配置したい角度を指定
- layout_constraintCircleRadius で基準の View から取る距離を指定
タップしたら円形の子メニューが出るようなレイアウトは View の onClickListener と View の VISIBLE を操作することで, これ 1 枚で書くことができますね。

タップしたら VISIBLE に変化させてみた様子
今回は画面の中心に置いた View を基準にしてレイアウトを組んでみました。簡単に書くと以下のようなコードです。