我正在尝试使用一个surfaceview(一个扩展surfaceview的自定义类),我在xml布局中添加了一个固定大小比例:4:3(长度到宽度)。
我希望它能够尽可能多地填充它的父级,无论是长度还是宽度,但是一旦它达到全长或宽度,它就会调整另一侧,使其具有像我之前所说的固定尺寸比。 / p>
我怎样才能实现这样的目标?
感谢。
答案 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
我没有尝试过这个实现,但它应该为你提供你想要的任何屏幕的比例。