studio - Cajón de navegación y VideoView en Android
reproducir video con mediaplayer android studio (4)
¿Intentaste usar TextureView lugar de VideoView?
ViedoView es bien conocido como la vista propensa a errores.
Escribí frame-video-view que (entre otras cosas) simplifica el uso de TextureView
como reproductor de video.
Estoy usando un cajón de navegación más un tablayout. Tengo un video en mi pestaña que no estaba visible al principio, pero puedo escuchar el sonido. Una vez me puse
video_view.setZOrderOnTop(true);
y también puedo ver el video, pero esto causa un problema con el cajón de navegación.
Cuando lo deslizo, el video no se oculta detrás del cajón de navegación como lo hacen todos los demás elementos.
Si no uso
video_view.setZOrderOnTop(true);
entonces mi cajón funciona bien.
main_activity.xml
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Framelayout to display Fragments -->
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/menuwhite2"
android:id="@+id/custom_home"
android:gravity="center"
android:layout_gravity="right"
android:layout_marginRight="10dp"/>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"
/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
<!-- Listview to display slider menu -->
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"
android:background="@color/list_background"/>
tab_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<android.support.v7.widget.CardView
android:id="@+id/cardview"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello"/>
</android.support.v7.widget.CardView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/layoutTop"
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/video_player_view"
android:layout_height="200dp"
android:layout_width="fill_parent"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutBottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layoutTop">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello"/>
</RelativeLayout>
<ImageView
android:id="@+id/overlapImage"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_above="@id/layoutBottom"
android:adjustViewBounds="true"
android:src="@mipmap/ic_launcher" />
</RelativeLayout>
</LinearLayout>
TabFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View view = inflater.inflate(R.layout.tab_fragment, container, false);
VideoView video_player_view = (VideoView) view.findViewById(R.id.video_player_view);
video_player_view.setVideoURI("videourl");
video_player_view.setZOrderOnTop(true);
video_player_view.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
video_player_view.start();
}
});
return view;
}
Entonces, ¿alguien puede guiarme con una alternativa para eso?
Cuando establezca ZOrderOnTop (verdadero) estará encima de otro diseño. De hecho, controla si la superficie de la vista de superficie se coloca en la parte superior de la ventana [ver más] .
Tengo un video en mi pestaña que no estaba visible al principio pero puedo escuchar el sonido.
De acuerdo con su comentario, coloca otro diseño en VideoView
para que no pueda ver VideoView, pero oye el sonido.
Girando el Layout bound
en el teléfono:
Setting-> developer option -> show Layout bound
Puedes ver lo que está pasando en tus Layouts
. Supongo que no puede ver VideoView
debido a esos match_parents
en su layout_height
(p. Ej .: ponga 50dp
para cada uno de ellos) y su problema se solucionará.
También haga que el diseño de la raíz sea match_parent
lugar de wrap_content
No se resuelve el problema pero está mucho mejor.
Después de algunos comentarios, el OP quería ver algo de código.
Ok, vamos a intentar algo como esto:
private DrawerLayout drawer;
private ActionBarDrawerToggle toggle;
protected void onResume() {
drawer.addDrawerListener(toggle);
toggle.syncState();
}
protected void onPause() {
drawer.removeDrawerListener(toggle);
toggle.syncState();
}
protected void onCreate(Bundle saveInstanceState) {
toggle = new ActionBarDrawerToggle(this, drawer,
toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
public void onDrawerClosed(View view) {
Log.d(TAG, "--> ActionBarDrawerToggle::onDrawerClosed
(view=" + view + ")");
syncActionBarArrowState();
//call videoView.setZOrderOnTop(true) so it''s over everything
}
public void onDrawerOpened(View drawerView) {
Log.d(TAG, "--> ActionBarDrawerToggle::onDrawerOpened
(drawerView=" + drawerView + ")");
toggle.setDrawerIndicatorEnabled(true);
//call videoView.setZOrderOnTop(false) so it''s NOT over the drawer
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, 0);
//call videoView.setZOrderOnTop(false)
//so it''s not over the drawer being pulled out
}
};
}