Как переключить FullScreen с помощью VideoView Android

Я использую просмотр видео для потоковой передачи в реальном времени, и я хочу, чтобы этот видеовизор переключил полноэкранный режим и вернулся на маленький экран, такой как MXPlayer или игроки YouTube, без остановки потоков.

<ScrollView android:id="@+id/scrollview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/ad_container" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:background="@android:color/transparent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" > <TextView android:id="@+id/scroll_annouc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:background="@color/red" android:ellipsize="marquee" android:fadingEdge="horizontal" android:lines="1" android:marqueeRepeatLimit="marquee_forever" android:padding="@dimen/ten_dp" android:scrollHorizontally="true" android:singleLine="true" android:text="@string/app_name" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@android:color/white" android:textStyle="bold" /> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/scroll_annouc" android:background="@android:color/transparent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="270dp" android:background="@android:color/black" > <TextView android:id="@+id/error_overlay" android:layout_width="match_parent" android:layout_height="270dp" android:layout_alignParentTop="true" android:background="@color/red_trans" android:gravity="center" android:text="@string/error_text" android:textColor="@android:color/white" android:textStyle="bold" android:visibility="invisible" /> <VideoView android:id="@+id/player" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> <RelativeLayout android:id="@+id/media_controller" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/black_trans" > <ImageView android:id="@+id/btn_playpause" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/btn_pause" android:contentDescription="@string/app_name" android:padding="@dimen/five_dp" /> <Button android:id="@+id/external_player" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@null" android:text="Use External Player" android:textColor="@android:color/white" android:textSize="@dimen/content_size" android:textStyle="bold" /> <ImageView android:id="@+id/btn_fullscreen" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:contentDescription="@string/app_name" android:padding="@dimen/five_dp" android:src="@drawable/enter_fullscreen" /> </RelativeLayout> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="@dimen/two_dp" android:background="@color/app_blue" /> <TextView android:id="@+id/loading_txt" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingBottom="@dimen/two_dp" android:paddingLeft="@dimen/ten_dp" android:paddingRight="@dimen/ten_dp" android:paddingTop="@dimen/two_dp" android:text="@string/app_name" android:textColor="@android:color/white" android:textSize="@dimen/content_size" android:visibility="invisible" /> <View android:layout_width="match_parent" android:layout_height="@dimen/one_dp" android:background="@color/light_grey" /> <View android:layout_width="match_parent" android:layout_height="@dimen/one_dp" android:background="@color/light_grey" /> <LinearLayout android:id="@+id/channel_links_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" android:padding="@dimen/ten_dp" > </LinearLayout> <View android:layout_width="match_parent" android:layout_height="@dimen/one_dp" android:background="@color/light_grey" /> <HorizontalScrollView android:id="@+id/horizontal_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:fillViewport="true" android:scrollbars="horizontal" > <LinearLayout android:id="@+id/viewsContainer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> </HorizontalScrollView> <View android:layout_width="match_parent" android:layout_height="@dimen/one_dp" android:background="@color/light_grey" /> </LinearLayout> </RelativeLayout> </ScrollView> 

Все работает отлично, как потоковое видео, и все, но я не могу сделать это видео, чтобы перейти к пейзажу и показать видео в полноэкранном режиме. Я пробовал искать его, но все примеры, которые я нашел, сейчас не работают для меня. Поэтому, пожалуйста, скажите мне, как можно переключать полноэкранный режим. Благодарю.

Что я сделал, так это то, что я создал CustomVideoView, который расширяет VideoView следующим образом:

 public class CustomVideoView extends VideoView { private int measuredWidth = 0; private int measuredHeight = 0; public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub } public CustomVideoView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public CustomVideoView(Context context) { super(context); // TODO Auto-generated constructor stub } public void setNewDimension(int width, int height) { this.measuredHeight = height; this.measuredWidth = width; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(measuredWidth, measuredHeight); } }//end class 

Затем, когда я работал над своим плеером, я реализовал его в полноэкранном режиме onclick:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); android.widget.RelativeLayout.LayoutParams params = new android.widget.RelativeLayout.LayoutParams( android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, android.widget.RelativeLayout.LayoutParams.MATCH_PARENT); player.setNewDimension(metrics.widthPixels, metrics.heightPixels); player.getHolder().setFixedSize(metrics.heightPixels, metrics.widthPixels); player.setLayoutParams(params); 

Поэтому с этим моя проблема была решена. Надеюсь, что это решит и другие проблемы.

ПРИМЕЧАНИЕ . Я сожалею, что не дал никому кредитов, поскольку забыл ссылки, найденные в google, которые заставляют меня делать подходящее решение для себя.

Чтобы сделать воспроизведение видео в полноэкранном режиме, вам необходимо создать отдельную активность, как показано ниже. Полностью экранная активность –

  public class HalfScreen extends Activity { Button fullbtn; VideoView videoView = null; final int REQUEST_CODE = 5000; // "https://www.youtube.com/embed/olsO7UJemhE"; final String videoToPlay = "http://bffmedia.com/bigbunny.mp4"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.half); videoView = (VideoView) findViewById(R.id.VideoViewhalf); final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); fullbtn = (Button) findViewById(R.id.btnfullScreen); Uri video = Uri.parse(videoToPlay); videoView.setVideoURI(video); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { progressBar.setVisibility(View.GONE); videoView.requestFocus(); videoView.start(); } }); fullbtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent videointent = new Intent(HalfScreen.this, FullScreen.class); videointent.putExtra("currenttime", videoView.getCurrentPosition()); videointent.putExtra("Url", videoToPlay); startActivityForResult(videointent, REQUEST_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("currenttime")) { int result = data.getExtras().getInt("currenttime", 0); if (result > 0) { if (null != videoView) { videoView.start(); videoView.seekTo(result); ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); progressBar.setVisibility(View.VISIBLE); } } } } } } //Now the full screen activity public class FullScreen extends Activity { Button btn; VideoView videoView = null; int currenttime = 0; String Url=""; private static ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); if (null != extras) { currenttime = extras.getInt("currenttime", 0); Url=extras.getString("Url"); } setContentView(R.layout.full); progressDialog = ProgressDialog.show(this, "", "Loading...", true); videoView = (VideoView) findViewById(R.id.VideoViewfull); MediaController mediaController = new MediaController(this); mediaController.setAnchorView(videoView); Uri video = Uri.parse(Url); videoView.setMediaController(mediaController); videoView.setVideoURI(video); videoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer arg0) { progressDialog.dismiss(); videoView.start(); videoView.seekTo(currenttime); } }); } @Override public void finish() { Intent data = new Intent(); data.putExtra("currenttime", videoView.getCurrentPosition()); setResult(RESULT_OK, data); super.finish(); } } //To make the video full screen use below layout full.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff99cc" android:orientation="vertical" > <VideoView android:id="@+id/VideoViewfull" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" > </VideoView> </RelativeLayout> 

Я знаю, что уже слишком поздно, но я просто пишу это для других товарищей.

Просто добавьте эту строку в свою манифестацию, чтобы избежать перезагрузки видео

 android:configChanges="orientation|screenSize|keyboardHidden" 

Надеюсь, поможет