0

onMeasure()現在、カスタムビュー内のメソッドをオーバーライドして、幅と高さが等しくなり、親linearlayoutがその寸法が変更されていないと考えているように見えることを除いて、すべてが機能しているように見えます。現在、幅を測定された高さに強制するためにsetMeasuredDimension()、オーバーライド内でメソッドを使用しています。親がこれらの変更を確認onMeasureするために他に何かする必要がありますか? viewgroupビューは正しいサイズで描画されますが、親ビュー グループは画面を超えて拡張されることに注意してください (onMeasure()オーバーライド内から設定された新しい幅は表示されません)。

リクエストに応じて、onMeasure() コードを以下に貼り付けました。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    int measuredHeight=getMeasuredHeight();
    setMeasuredDimension(measuredHeight,measuredHeight);

    if(measuredHeight > m_iconType.largestDimension()){
        m_iconType.largestDimension(measuredHeight);
        try {
            Class<?>clazz = Class.forName(m_iconType.iconClassName());
            Constructor<?> constructor = clazz.getConstructor(Integer.TYPE);
            m_iconType.icon((CachedBoardElement)constructor.newInstance(measuredHeight));
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

明確にするために、CachedBoardElement は、構築中に最大サイズが設定されるビットマップ キャッシュ ベクター キャンバスです。ビューが現在の最大値を超える場合は、再作成する必要があります。

4

0 に答える 0