2015-11-09 2 views
0

У меня есть медиаплеер с SurfaceView. Я пытаюсь найти решение для переключения между полноэкранным и встроенным режимами. Пользовательский медиа-контроллер был разработан для MediaPlayer, используя эту популярную статью http://www.brightec.co.uk/ideas/custom-android-media-controller. Итак, теперь у меня есть кнопка на пользовательском контроллере мультимедиа для переключения режима.Android SurfaceView to full screen

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, чтобы заполнить все спа Например, в приложении YouTube по умолчанию видео находится в кадре, и есть кнопка для растягивания видео. Мне нужно точно то же самое. – Anton