0

多数のビューを含むカスタムViewGroupを開発しています。コンストラクターで、それぞれ2つのImageViewを含むいくつかのFrameLayoutを作成します。各Framelayoutと子ビューは、次のコードを使用して作成されます。

FrameLayout frame = new FrameLayout(context);

ImageView digitView = new ImageView(context);
digitView.setScaleType(ScaleType.CENTER_CROP);
frame.addView(digitView,
        new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));

ImageView bezelView = new ImageView(context);
bezelView.setScaleType(ScaleType.CENTER_CROP);
bezelView.setImageResource(R.drawable.bezel);
frame.addView(bezelView);


this.addView(frame, params); 

onMeasureコールバックで、カスタムViewGroupのディメンションを設定しました

        this.setMeasuredDimension(254, 43);

onLayoutコールバックでは、各FrameLayoutのサイズを計算し、それぞれのレイアウトメソッドを呼び出します。

@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom)
{
    if (changed)
    {
        float width = (float)(right - left) / (float)this.digits;

        if ((int)(width/ASPECT_RATIO) > bottom- top)
            width = (float)(bottom - top) * ASPECT_RATIO;
        this.digitWidth = (int)width;
        this.digitHeight = (int)(width/ASPECT_RATIO);

        this.xOffset = ((right - left) - (this.digits * this.digitWidth))/2;
        this.yOffset = ((bottom - top) - this.digitHeight)/2;

        for (int i = this.digits-1; i >=0; i--)
        {
            int x = xOffset + i * this.digitWidth;
            this.placeFrames.get(i).layout(x, this.yOffset, x + this.digitWidth, yOffset + this.digitHeight); 

        }
    }
}

私が抱えている問題は、FrameLayoutsがカスタムGroupView内で正しいサイズと位置に配置されているが、ImageViewsがFrameLayoutsによってサイズ変更されていないことです-幅と高さがゼロです。HierarchyViewerを使用してこれを検証しました。

私は何かを見逃したと思います-FrameLayoutのレイアウトメソッドは、子としてFrameLayoutに追加されたときに渡されたレイアウトパラメータに基づいて子ImageViewのサイズ変更を処理すると思いましたが、そうではないようです。

正しい方向へのポインタをいただければ幸いです。

ありがとう

アンドリュー

4

1 に答える 1

0

FrameLayoutのlayoutメソッドは、子としてFrameLayoutに追加されたときに渡されたレイアウトパラメーターに基づいて、子ImageViewのサイズ変更を処理すると想定しましたが、そうではないようです。

あなたlayout()自身はこれらのImageViewオブジェクトではなく、.を呼び出していませんsuper.onLayout()

于 2012-11-14T20:56:23.253 に答える