私は現在、カスタムViewGroupクラスを実装しました。これは、アイテム(描画可能なボタン)を画面全体に均等かつ斜めに配置しようとします。
残念ながら、アイテムが大きすぎると、すべてが画面に収まるようにオーバーラップする傾向があります。
既存のレイアウト(API8 +)を使用してこれを実現する簡単な方法があることを望んでいます。または、単純なものがある場合は、ViewGroupクラスを変更して、子ビューを小さくして重複を回避できます。(各子に、オーバーラップせずに均等にレイアウトするために必要な正確なサイズを表示させるなど)
これが私のonMeasureクラスです(特別なことは何もしていません。子供たちに自分で測定させます)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measureChildren(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
}
編集:onMeasureを変更して、子を特定の幅/高さまで手動で測定すると、クリップされます。子ビュー(またはそのドローアブル)が実際に測定値の内側に収まるように拡大縮小されているようには見えません。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int newChildWidth = width / getChildCount();
int newChildHeight = height / getChildCount();
final int size = getChildCount();
for (int i = 0; i < size; ++i) {
View child = getChildAt(i);
child.measure(MeasureSpec.EXACTLY | newChildWidth, MeasureSpec.EXACTLY | newChildHeight);
}
setMeasuredDimension(width, height);
}