缩放自定义布局

缩放自定义布局

问题描述:

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

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

+0

你为你的最后'HEIGHT'和'WIDTH'领域指定固定的值,然后调整你的事实'Canvas'相应手段有效地,您正在制定“绝对”布局原则。你确定你想这么做吗?为什么不希望操作系统根据屏幕大小和密度自动调整,是否有特殊原因? – Squonk 2012-07-31 22:46:48

+0

当我让操作系统决定时,只要容器的高度大于自定义布局,它就会按照宽度缩放自定义布局。如果容器比自定义布局短,它会从底部开始收割。 – Rooster242 2012-08-01 01:21:26

这是因为您的统一比例为scale = Math.min(scaleX, scaleY);,这可能会导致宽度和高度方面的问题,因为它取决于两个中的最小值。

尝试不均匀的比例缩放画布以适应屏幕

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

但我需要自定义布局的规模均匀,以便它的内容不会向一个方向或另一个方向伸展。不能保证容器的尺寸。 – Rooster242 2012-08-01 01:17:38