【问题标题】:Navigation Drawer and VideoView in androidandroid中的导航抽屉和视频视图
【发布时间】:2016-12-27 11:05:43
【问题描述】:

我正在使用导航抽屉和标签布局。我的标签中有一个视频,起初看不到,但我能听到声音。一旦我设置了

video_view.setZOrderOnTop(true);

我也可以看到视频,但这会导致导航抽屉出现问题

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

如果我不使用

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

那么任何人都可以用替代方法指导我。

【问题讨论】:

  • setZOrderOnTop(false) 抽出抽屉时。
  • 好吧,我想过这样做,但我的问题是抽屉处于活动状态,而 videoview 处于 tablayout 中。所以对此有任何想法。
  • 如果您的视频在开场前停止播放会怎样?
  • 如果我 setZOrderOnTop(false) 则视频表现正常,如果设置为 true,则无论是否正在播放,始终保持在顶部。
  • 把相关部分的代码。 DrawerLayout & VideoView

标签: android navigation-drawer android-tablayout android-videoview


【解决方案1】:

当您 setZOrderOnTop(true) 时,它将位于其他布局之上。实际上它控制了surface view的surface是否放在它上面window [see more]

我的标签中有一个视频,起初看不到,但我可以 听到声音。

根据您的评论,您将其他布局放在 VideoView 上,因此您看不到 VideoView 但您听到声音。

通过手机转Layout bound

Setting-> developer option -> show Layout bound

您可以在Layouts 中查看正在发生的事情。我猜你看不到VideoView,因为match_parents 在你的layout_height 中仔细检查它们(例如:为每个人输入50dp),你的问题将得到解决。

同时创建根布局match_parent 而不是wrap_content。这不是解决问题,但它好多了。

【讨论】:

  • 您的回答对我没有帮助,但给了我解决问题的想法,谢谢
【解决方案2】:

几次cmets后,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
            }
        };
}

【讨论】:

    【解决方案3】:

    您是否尝试使用 TextureView 代替 VideoView?
    ViedoView 以容易出错的视图而闻名。

    我写了frame-video-view,它(除其他外)简化了将TextureView用作视频播放器的过程。

    【讨论】:

      【解决方案4】:

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

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

      试试这个

      用过这个

        video_player_view.setZOrderMediaOverlay(true);
      

      代替

        video_view.setZOrderOnTop(true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        相关资源
        最近更新 更多