我有一個內部佈局和一個SurfaceTexture
與視頻流的對話框。當我收到width
和height
從視頻,我調整我的佈局是這樣的:佈局寬度和高度被忽略
private void resizeView(final VideoFormatInfo info) {
final Size size = calculateSize(info.getWidth(), info.getHeight());
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
final ViewGroup.LayoutParams layoutParams = mInnerLayout.getLayoutParams();
layoutParams.width = size.x;
layoutParams.height = size.y;
Log.i(TAG, String.format("run: setting innerlayout bounds to %d,%d", size.x, size.y));
mInnerLayout.setLayoutParams(layoutParams);
}
});
}
現在我有一個全屏按鈕應該佈局調整到整個屏幕。但是當我按下它時,佈局仍保留在屏幕的一小部分區域。
當我檢查日誌時,size.x
和size.y
的適當值是否存在(屏幕邊界),但佈局沒有正確調整大小。
innerlayout被添加到名爲「VideoPlayer」的customView。我將錄像機背景的顏色設置爲紅色,所以當我切換到全屏時,整個屏幕會變成紅色,除了中間的視頻流。這意味着底層視圖正在適當調整大小,但innerLayout不是由於某種原因。
有趣的是,我在視頻渲染上創建了另一個佈局,創建了一個「閃光效果」以在拍攝快照時模擬相機閃光燈。當該閃光效果被觸發時,則視頻被調整到整個屏幕。
所以這是我的佈局樹:
VideoPlayerView (CustomView, not VideoView)
innerLayout (RelativeLayout)
videoSurfaceTexture (SurfaceTextureView)
flashLayout (RelativeLayout)
我還設置這個調試:
@Override
public void onSurfaceTextureSizeChanged(final SurfaceTexture surfaceTexture, final int width, final int height) {
Log.d(TAG, "onSurfaceTextureSizeChanged size=" + width + "x" + height + ", st=" + surfaceTexture);
Log.i(TAG, String.format("innerlayout bounds are %d,%d", mInnerLayout.getLayoutParams().width, mInnerLayout.getLayoutParams().height));
}
和內佈局的值是合適的值(與整個屏幕的)當我按全屏時,但佈局沒有調整大小。我可以告訴它佈局沒有被調整大小,因爲我將它的背景顏色更改爲綠色並添加了一些填充,我可以在屏幕的中心看到它佔用很小的空間。
看起來好像不知道該視圖沒有被佈局更改更新。
我在這裏沒有什麼想法了。我試過invalidate()
,postInvalidate()
和forceLayout()
,但那些不起作用。
用正確的'LayoutParams'類(直接父容器)嘗試,而不是'ViewGroup.LayoutParams' ... – Shaishav
@Shaishav試過了,沒有用:( –
做你嘗試它,而沒有視頻流?!! –