1. 程式人生 > >Android--改變SurfaceView控制元件的大小

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;