studio programacion pantalla navegador móviles modo inmersivo desarrollo curso completa aplicaciones android

programacion - pantalla completa android 8



VideoView pantalla completa en la aplicación de Android (10)

Haga clic en el botón para iniciar el native video player que se abrirá en full screen :

Intent intent = new Intent(Intent.ACTION_VIEW ); intent.setDataAndType(Uri.parse(path), "video/*"); startActivity(intent);

Tengo un video en mi aplicación. El código es así.

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/opsbuds"> <TextView android:text="TextView" android:id="@+id/adtxt1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <VideoView android:layout_width="300dip" android:layout_height="250dip" android:id="@+id/videoView11" android:layout_marginLeft="30dip"></VideoView> <LinearLayout android:layout_width="match_parent" android:id="@+id/llv11" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> <Button android:text=" Continue " android:id="@+id/button1211" android:layout_width="wrap_content" android:textStyle="bold" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:textSize="20dp" android:layout_marginLeft="5dp" android:textColor="#800080" android:background="@drawable/button"></Button> </LinearLayout>

El ancho y la vista de video se mencionan en el archivo xml. Lo que quiero es que, una vez que presiono un botón, la videovisión debería aparecer en pantalla completa y una vez que presione el botón Atrás, la videovigilancia debería volver a su tamaño mencionado. ¿por favor ayuda?


He hecho de esta manera:

Compruebe estas capturas de pantalla de referencia.

Añadir clase FullScreenVideoView.java :

import android.content.Context; import android.util.AttributeSet; import android.widget.VideoView; public class FullScreenVideoView extends VideoView { public FullScreenVideoView(Context context) { super(context); } public FullScreenVideoView(Context context, AttributeSet attrs) { super(context, attrs); } public FullScreenVideoView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); } }

Cómo enlazar con xml :

<FrameLayout android:id="@+id/secondMedia" android:layout_width="match_parent" android:layout_height="match_parent"> <com.my.package.customview.FullScreenVideoView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fullScreenVideoView"/> </FrameLayout>

Espero que esto te ayudará.


Lo logré cambiando a orientación horizontal y estableciendo parámetros de diseño a MATCH_PARENT . Justo antes de cambiar al modo de pantalla completa, debemos almacenar el modo de orientación actual y los VideoView de defaultScreenOrientationMode defaultVideoViewParams variables defaultScreenOrientationMode y defaultScreenOrientationMode correspondiente. Para que podamos usarlos cuando salgamos del modo de pantalla completa de video. Por lo tanto, cuando desee abrir el video en modo de pantalla completa, use el método makeVideoFullScreen() para salir - exitVideoFullScreen() .

Tenga en cuenta que usé RelativeLayout para mi VideoView , en su caso puede ser otro tipo de diseño.

private RelativeLayout.LayoutParams defaultVideoViewParams; private int defaultScreenOrientationMode; // play video in fullscreen mode private void makeVideoFullScreen() { defaultScreenOrientationMode = getResources().getConfiguration().orientation; defaultVideoViewParams = (LayoutParams) videoView.getLayoutParams(); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); videoView.postDelayed(new Runnable() { @Override public void run() { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); videoView.setLayoutParams(params); videoView.layout(10, 10, 10, 10); } }, 700); } // close fullscreen mode private void exitVideoFullScreen() { setRequestedOrientation(defaultScreenOrientationMode); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); videoView.postDelayed(new Runnable() { @Override public void run() { videoView.setLayoutParams(defaultVideoViewParams); videoView.layout(10, 10, 10, 10); } }, 700); }


Pruebe el código de abajo aquí.

if (!isFullScreen()) { Log.v("Full screen", "-----------is full screen------------"); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels; android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) videoSurface.getLayoutParams(); params.width = width; params.height=height; params.setMargins(0, 0, 0, 0); } else{ Log.v("Full screen", "-----------small screen------------"); DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels; android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) videoSurface.getLayoutParams(); params.width = width; params.height=height / 3; params.setMargins(0, 0, 0, 0); }


Puedes lograrlo creando dos actividades separadas. Supongamos que la primera actividad es la mitad de la actividad de pantalla. En esta actividad su vista de video tiene tamaño pequeño. Al hacer clic en el botón del video de pantalla completa, inicie otra actividad ''actividad de pantalla completa''. En la segunda actividad, la vista del video debe coincidir con el diseño principal. También puede iniciar el video en pantalla completa desde donde está pausado en la mitad de la pantalla. En mi código lo he implementado. También puede reanudar el video en la mitad de la pantalla en La prensa trasera de la actividad de pantalla completa. Esto es un trabajo para mí. Espero que también funcione para ti.

Here is the code half.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#aa99cc" android:orientation="vertical" > <VideoView android:id="@+id/VideoViewhalf" android:layout_width="match_parent" android:layout_height="300dp" > </VideoView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/btnfullScreen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fullscreen" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> HalfScreen activity public class HalfScreen extends Activity { Button btn; VideoView videoView = null; final int REQUEST_CODE = 5000; final String videoToPlay = "http://bffmedia.com/bigbunny.mp4"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.half); videoView = (VideoView) findViewById(R.id.VideoViewhalf); final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); btn = (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(); } }); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub 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); } } } } } } full.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout 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="match_parent" android:layout_height="match_parent" > </VideoView> </LinearLayout> FullScreen 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(); } }


Si desea mantener la relación de aspecto de un video o estirarlo para que ocupe su área principal, con el administrador de diseño adecuado puede hacer el trabajo.

Mantener la relación de aspecto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <VideoView android:id="@+id/videoView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center"/> </LinearLayout>

!!! Para rellenar el campo:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <VideoView android:id="@+id/videoViewRelative" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_width="fill_parent" android:layout_height="fill_parent"> </VideoView> </RelativeLayout>


Tuve que hacer que mi VideoView se siente en un RelativeLayout para que la respuesta elegida funcione.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <VideoView android:id="@+id/videoViewRelative" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_width="fill_parent" android:layout_height="fill_parent"> </VideoView> </RelativeLayout>

Como se indica aquí: blog.kasenlam.com/2012/02/… entre los tamaños de pantalla sería tan simple como cambiar los parámetros de diseño como se indica en la respuesta elegida.


configurar pantalla completa de esta manera,

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) videoView.getLayoutParams(); params.width = metrics.widthPixels; params.height = metrics.heightPixels; params.leftMargin = 0; videoView.setLayoutParams(params);

y de vuelta al tamaño original, de esta manera.

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) videoView.getLayoutParams(); params.width = (int) (300*metrics.density); params.height = (int) (250*metrics.density); params.leftMargin = 30; videoView.setLayoutParams(params);


Este código es para vídeo panorámico a pantalla completa.

AndroidManifext.xml (Configuración de la orientación)

<activity android:name=".Video1" android:screenOrientation="landscape" />

Video1.java Código:

import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.WindowManager; import android.widget.MediaController; import android.widget.VideoView; public class Video1 extends AppCompatActivity { private VideoView videoView; private MediaController mediaController; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video1); videoView = findViewById(R.id.videoView); String fullScreen = getIntent().getStringExtra("fullScreenInd"); if("y".equals(fullScreen)){ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getSupportActionBar().hide(); } Uri videoUri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.YOUR_VIDEO_NAME); videoView.setVideoURI(videoUri); mediaController = new FullScreenMediaController(this); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); videoView.start(); } }

Código FullScreenMediaControler.java:

import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.MediaController; public class FullScreenMediaController extends MediaController { private ImageButton fullScreen; private String isFullScreen; public FullScreenMediaController(Context context) { super(context); } @Override public void setAnchorView(View view) { super.setAnchorView(view); //image button for full screen to be added to media controller fullScreen = new ImageButton (super.getContext()); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.RIGHT; params.rightMargin = 80; addView(fullScreen, params); //fullscreen indicator from intent isFullScreen = ((Activity)getContext()).getIntent(). getStringExtra("fullScreenInd"); if("y".equals(isFullScreen)){ fullScreen.setImageResource(R.drawable.ic_fullscreen_exit); }else{ fullScreen.setImageResource(R.drawable.ic_fullscreen); } //add listener to image button to handle full screen and exit full screen events fullScreen.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getContext(),Video1.class); if("y".equals(isFullScreen)){ intent.putExtra("fullScreenInd", ""); }else{ intent.putExtra("fullScreenInd", "y"); } ((Activity)getContext()).startActivity(intent); } }); } }


Primer método

cuando desee abrir un video en pantalla completa para esa Actividad, debe configurar el atributo de tema en el Manifiesto. establece este valor que es

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

cambiar el tema programáticamente aquí

Segundo método

cree otro fullscreen.xml como a continuación y setContentView(R.layout.fullscreen) al hacer clic en el botón

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/myvideoview" android:layout_width="fill_parent" android:layout_alignParentRight="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_height="fill_parent"> </VideoView> </RelativeLayout>