Android--改變SurfaceView控制元件的大小
阿新 • • 發佈:2019-01-24
最近,被如何修改顯示視訊的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;