我正在尝试在xml布局中添加一个surfaceview(扩展surfaceview的自定义类)以具有固定的尺寸比:4:3(长宽比)。
我希望它在长度或宽度上尽可能多地填充它的父级,但是一旦它达到全长或全宽,它就会像我之前所说的那样调整另一侧以具有固定的尺寸比。
我怎样才能做到这一点?
谢谢。
我正在尝试在xml布局中添加一个surfaceview(扩展surfaceview的自定义类)以具有固定的尺寸比:4:3(长宽比)。
我希望它在长度或宽度上尽可能多地填充它的父级,但是一旦它达到全长或全宽,它就会像我之前所说的那样调整另一侧以具有固定的尺寸比。
我怎样才能做到这一点?
谢谢。
在活动的 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)使用相对布局并将图像视图放置在相对布局中,使用 match_parent 作为高度和宽度,并使用 scaletype CENTER_INSIDE 或 CENTER_CROP 如果你去 van gocha 并创建了大量资产
3)在图像视图之后将您的表面视图添加到布局中,并与图像视图对齐顶部/底部/右/左
我还没有尝试过这种实现,但它应该为你提供你想要的任何屏幕的比例。