Android:如何在xml中将自定义surfaceview设置为固定大小的比例?

时间:2012-10-26 07:38:13

标签: android surfaceview

我正在尝试使用一个surfaceview(一个扩展surfaceview的自定义类),我在xml布局中添加了一个固定大小比例:4:3(长度到宽度)。

我希望它能够尽可能多地填充它的父级,无论是长度还是宽度,但是一旦它达到全长或宽度,它就会调整另一侧,使其具有像我之前所说的固定尺寸比。 / p>

我怎样才能实现这样的目标?

感谢。

2 个答案:

答案 0 :(得分: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);        
}

答案 1 :(得分:2)

这可能是一种hacky但你可以把一个空白的imageview作为surfaceview的一种框架。现在来解释一下疯狂

  

1)创建一个符合您想要的比例的图像资源   透明。让我们称之为我们的幽灵形象(可能是最好的   也是看不见的)

     

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

     

3)在imageview和之后将表面视图添加到布局中   aligntop / bottom / right / left with the image view

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