0

RelativeLayout から派生したカスタム レイアウトがあります。配置されているコンテナー レイアウトのサイズに応じて、カスタム レイアウトをスケーリングする必要があります。

これは、これまでのカスタム レイアウトの内容です。

public class ScaledRelativeLayout extends RelativeLayout {

    private static final float HEIGHT = 460;
    private static final float WIDTH = 380;
    private float scale = 1.0f;
    private float pivotX = 0.0f;
    private float pivotY = 0.0f;
    Matrix matrix = new Matrix();

    public ScaledRelativeLayout( Context cxt, AttributeSet attrs ) {
        super( cxt, attrs );
    }

    @Override
    public void dispatchDraw( Canvas canvas ) {
        canvas.save();

        View parent = (View)getParent();
        int parentHeight = parent.getHeight();
        int parentWidth = parent.getWidth();

        float scaleX = (float)parentWidth / WIDTH;
        float scaleY = (float)parentHeight / HEIGHT;
        scale = Math.min( scaleX, scaleY );

        pivotX = (float)parentWidth / 2;
        pivotY = 0;

        canvas.scale( scale, scale, pivotX, pivotY );

        super.dispatchDraw( canvas );

        canvas.restore();
    }
}

これはほとんど機能します。問題は、何らかの理由でカスタム ビューの下部がトリミングされていることです。ビューが描画されたときのクリッピング領域が小さすぎるようです。

4

1 に答える 1

0

scale = Math.min( scaleX, scaleY );これは、最小値の 2 に依存するため、幅と高さで問題が発生する可能性があるため、これを均一にスケーリングしているためです。

画面に合わせてキャンバスをスケーリングするために不均一なスケーリングを試みます

canvas.scale( scaleX, scaleY, pivotX, pivotY );
于 2012-07-31T22:40:39.800 に答える