缩放自定义布局

时间:2012-07-31 22:34:01

标签: android android-layout

我有一个从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();
    }
}

这几乎可行。问题是自定义视图由于某种原因在底部被裁剪。就像绘制视图时裁剪区域太小一样。

1 个答案:

答案 0 :(得分:0)

这是因为你正在做scale = Math.min( scaleX, scaleY );的统一比例,这可能会导致宽度和高度出现问题,因为它取决于最小的两个。

尝试非均匀缩放以缩放画布以适合屏幕

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