17

我正在使用导航抽屉加上一个tablayout。我的标签中有一个视频,一开始不可见,但我可以听到声音。一旦我设定导航抽屉和android中的VideoView

video_view.setZOrderOnTop(true); 

,我也可以看视频,但是这会导致问题导航抽屉里。

当我滑动它时,与所有其他元素一样,视频不会隐藏在导航抽屉后面。

enter image description here

如果我不使用

video_view.setZOrderOnTop(true); 

然后我的抽屉里是能正常工作。

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; 
} 

因此,谁能指导我与该替代。

+0

'setZOrderOnTop(假)'拉出抽屉时。 – Shark

+0

好吧,我想这样做,但我的问题是,抽屉是在活动和videoview是在Tablayout ..所以任何想法。 – Atula

+0

如果您的视频在开场前停止,会发生什么情况? – Initerworker

回答

4

@Atula我建议你为这个简单的解决方案....这是工作完美

附上的截图中正常工作....

试试这个

使用这

video_player_view.setZOrderMediaOverlay(true); 

,而不是

video_view.setZOrderOnTop(true); 

enter image description here

+0

谢谢@Arjun .. – Atula

+0

欢迎...... @ Atula :) :) –

1

当你setZOrderOnTop(true)它将在其他布局的顶部。实际上,它控制表面视图的表面是否放置在窗口 [see more]的顶部。

我在我的标签页中有一个视频,它在开始时不可见,但我可以听到声音 。

根据你的评论,你把其他布局VideoView所以你不能看到VideoView但你听到的声音。

通过电话转Layout bound

你可以看到发生了什么事情在你的Layouts。我猜你看不到VideoView,因为你的layout_height中有match_parents,请仔细检查它们(例如:把50dp换成它们中的每一个),你的问题就会被修复。

也使根布局match_parent而不是wrap_content。这并不能解决问题,但它更好。

+0

您的回答didnot帮助我,但给了我一个想法解决我的问题谢谢 – Atula

0

经过一些评论,OP想看到一些代码。

好吧,让我们尝试这样的事:

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 
      } 
     }; 
} 
0

你尝试使用TextureView代替VideoView?
ViedoView是众所周知的容易出错的视图。

我写了frame-video-view哪些(除其他外)简化了使用TextureView作为视频播放器。