Android--改变SurfaceView控件的大小

最近,被如何修改显示视频的SurfaceView控件大小(即视频播放时所看到的画面大小)搞得焦头烂额。查看了各种技术网站以及源码,终于找到了。

有两个tips需要注意:

视频的大小:即视频解码后原本的Video size大小;

播放视频时的大小:指的是播放视频的控件的大小;

1、SurfaceHodler.setFixedSize(int w, int h);

函数功能说明:告诉系统真实的Video size的大小。

2、LayoutParams的使用--修改SurfaceView控件的大小

我的应用是在一个FrameLayout布局中包含了一个SurfaceView控件,所以修改SurfaceView大小的方法如下:

import android.widget.FrameLayout;
import android.view.Gravity;

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMainView = inflater.inflate(R.layout.main, null);
mSurfaceView = mMainView.findViewById(R.id.bcview);

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(int w, int h);
lp.gravity = Gravity.LEFT|Gravity.TOP;
lp.leftMargin = 0; //矩形距离原点最近的点距离X轴的距离
lp.topMargin = 0; //矩形距离原点最近的点距离Y轴的距离
//以上两个值,即坐标(x,y);
mBackcarView.setLayoutParams(lp);

其中,FrameLayout是可以根据实际情况修改的。

3.若SurfaceView控件在Activity上,则设置其坐标时如下

Window win = mActivity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
winParams.x = 0;
winParams.y = 0;
winParams.width = 4;
winParams.height = 8;

4.若SurfaceView不在Activity上,则可获取之后再设置:

在SurfaceView的子类文件中:

FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)getLayoutParams( );
lp.leftMargin = 0;
lp.topMargin = 0;
lp.width = 90;
lp.height = 100;

你可能感兴趣的:(#,其他)