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();
}
}
這幾乎工程。問題是自定義視圖由於某種原因在底部被裁剪。就好像裁剪區域在繪製視圖時太小。
你爲你的最後'HEIGHT'和'WIDTH'領域指定固定的值,然後調整你的事實'Canvas'相應手段有效地,您正在制定「絕對」佈局原則。你確定你想這麼做嗎?爲什麼不希望操作系統根據屏幕大小和密度自動調整,是否有特殊原因? – Squonk 2012-07-31 22:46:48
當我讓操作系統決定時,只要容器的高度大於自定義佈局,它就會按照寬度縮放自定義佈局。如果容器比自定義佈局短,它會從底部開始收割。 – Rooster242 2012-08-01 01:21:26