2015-11-09 174 views
0

我有一個帶有SurfaceView的媒體播放器。我試圖找到一個解決方案來切換全屏和嵌入模式。自定義媒體控制器是爲MediaPlayer使用此流行文章http://www.brightec.co.uk/ideas/custom-android-media-controller開發的。所以現在我有自定義媒體控制器上的按鈕來切換模式。Android SurfaceView全屏幕

XML活動(不完全)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 
     <ListView 
      android:id="@+id/lvMain" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:background="#20FFFFFF" > 
     </ListView> 
     <FrameLayout 
      android:id="@+id/videoSurfaceContainer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 
      <SurfaceView 
       android:id="@+id/videoSurface" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 
     </FrameLayout> 
    </LinearLayout> 

我有一種找到了解決方案,以改變SurfaceView的大小,尺寸改變,但不進入全屏模式,畫面在他們的框架:

@Override 
    public void toggleFullScreen() { 
     setFullScreen(isFullScreen()); 
    } 

    @Override 
    public boolean isFullScreen() { 

     if(mFullScreen){ 
      return false; 
     }else{ 
      return true; 
     } 
    } 

    public void setFullScreen(boolean fullScreen){ 
     fullScreen = false; 

     if (mFullScreen) { 
      DisplayMetrics displaymetrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
      android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) videoSurface.getLayoutParams(); 
      params.width = displaymetrics.widthPixels; 
      params.height = displaymetrics.heightPixels; 
      params.setMargins(0, 0, 0, 0); 
      mFullScreen = fullScreen; 
     } 
     else{ 
      DisplayMetrics displaymetrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
      final FrameLayout mFrame = (FrameLayout) videoSurfaceContainer; 
      int height = mFrame.getHeight(); 
      int width = mFrame.getWidth(); 
      android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) videoSurface.getLayoutParams(); 
      params.width = width; 
      params.height= height; 
      params.setMargins(0, 0, 0, 0); 
      mFullScreen = !fullScreen; 
     } 
    } 

回答

0

我決定把所有其他ViewGroups和ListView無形的,在這種情況下SurfaceView是在我的佈局全屏模式

 if (mFullScreen) { 
       paneltop.setVisibility(View.GONE); 
       panelbottom.setVisibility(View.GONE); 
       lvMain.setVisibility(View.GONE); 
       mFullScreen = fullScreen; 
      } 
      else{ 

       paneltop.setVisibility(View.VISIBLE); 
       panelbottom.setVisibility(View.VISIBLE); 
       lvMain.setVisibility(View.VISIBLE); 
       mFullScreen = !fullScreen; 
      } 
0

目前尚不清楚什麼是你正在尋找的,所以我就提供一些想法:

- 我想SurfaceView不能在運行中調整。你必須無效/重新創建視圖。 TextureView提供了更好的視圖處理能力,並且性能很小。

- 如果你只是想切換到全屏活動(無actinobars等):見here爲Android> 4.4,否則你需要做的是對的onCreate(因此需要活動刷新生效):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(YOURFULLSCREENCHECKHERE) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
    setContentView(R.layout.main); 
} 
+0

有一些意見(圖像,按鈕),ListView和FrameLayout裏有SurfaceView,我需要拉伸SurfaceView以填充所有Spa例如,在YouTube應用程序中,默認情況下,視頻在框架中,並且有一個按鈕用於展開視頻。我需要完全一樣的。 – Anton