2012-04-30 10 views
0

現在のところ、カスタムの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); 
    } 

EDIT(特別何もしていない子どもたちがthemselfsを測定させる。):私は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); 
    } 
+0

あなたはそれぞれの子供のために 'ImageView'を使用していますか?もしそうなら 'ImageView.ScaleType'を試してみてください。 – techiServices

+0

申し訳ありませんが、「ImageButton」と言ってください。 – techiServices

答えて

1

あなたは子ビューが正確に斜めのレイアウトにしたい場合はこれまでのところ、あなたは正しい考えを持って、それはそれを達成するために彼らにMeasureSpecを提供するために、囲みViewGroupの仕事だとMeasureSpec.EXACTLYは、それぞれの子を教えてくれますどれくらい大きいか。 MeasureSpec.AT_MOSTのコンテンツを交換して、コンテンツの少ない子どもを小さくしても、指定したサイズを決して超えることはできませんが、EXACTLYは毎回同じサイズになります。

あなたが今説明している問題は、Viewのカスタマイズがなければ本当に解決できない問題です。 Androidのビューは、「ビューのサイズに合わせてコンテンツのサイズを変更する」というわけではなく、「コンテンツのビューのサイズを変更する」というパラダイムで動作します。したがって、Buttonに、テキスト/イメージの内容を描画するのに必要なスペースよりも小さくなるように指定すると、クリップされます。このルールの例外の1つはImageViewです。あなたはこれを回避したい場合は、とにかくViewGroupをカスタマイズしているので、あなたは、onMeasure()

別の可能なオプションで、それに与えられた仕様に基づいてテキストサイズや描画可能サイズを変更するButtonをカスタマイズする必要があります、を利用することです子静的変換。 ViewGroupsetStaticTransformationsEnabled(true)を呼び出し、getChildStaticTransformation()を上書きすると、特定のサイズよりも大きくしたい各子ビューに拡大率を適用できます。この変換は、アニメーションの動作と似ているため、ビュー全体が縮小されます。

HTH

+0

ありがとうございます。ある時点で私はこれを再調査しますが、私はLinearLayoutを不正行為して拡張することに決めましたが、onLayoutをオーバーライドすることで、子ビューの垂直方向の間隔を変更することができます。 (LinearLayoutは、レイアウトウェイトを割り当てた場合、子を適切にスケールダウンするように見えます) – NPike

+0

目的が許せば、既存のレイアウトマネージャをオーバーライドするのが一番です。乾杯! – Devunwired

+0

私は似たような仕事をしようとしています。あなたが最終的にどのようにしたのか知りたかっただけです – Sammer