5

我正在尝试在xml布局中添加一个surfaceview(扩展surfaceview的自定义类)以具有固定的尺寸比:4:3(长宽比)。

我希望它在长度或宽度上尽可能多地填充它的父级,但是一旦它达到全长或全宽,它就会像我之前所说的那样调整另一侧以具有固定的尺寸比。

我怎样才能做到这一点?

谢谢。

4

2 回答 2

5

在活动的 onCreate 方法中,您可以读取屏幕的分辨率并将布局宽度和高度设置为它。

假设您使用 RealtiveLayout 的示例:

private void create43RatioSurface() {
    SurfaceView surfaceView43 = (SurfaceView)findViewById(R.id.surfaceView1);

    DisplayMetrics metrics = getResources().getDisplayMetrics();
    int height = 0;
    int width = 0;

    if(metrics.widthPixels < metrics.heightPixels){
        width = metrics.widthPixels;
        height= (metrics.widthPixels/4) * 3 ;
    } else {
        height= metrics.heightPixels;
        width= (metrics.heightPixels/4) * 3 ;
    }

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);

    surfaceView43.setLayoutParams(layoutParams);        
}
于 2012-10-26T07:46:44.870 回答
2

这可能有点骇人听闻,但您可以将空白图像视图作为表面视图的一种框架。现在来解释疯狂

1)创建一个符合您想要的比例且全透明的图像资产。让我们称之为我们的幽灵图像(最好也让它不可见)

2)使用相对布局并将图像视图放置在相对布局中,使用 match_parent 作为高度和宽度,并使用 scaletype CENTER_INSIDE 或 CENTER_CROP 如果你去 van gocha 并创建了大量资产

3)在图像视图之后将您的表面视图添加到布局中,并与图像视图对齐顶部/底部/右/左

我还没有尝试过这种实现,但它应该为你提供你想要的任何屏幕的比例。

于 2012-10-26T08:06:12.137 回答