【问题标题】:How to play fullscreen video using surfaceview?如何使用surfaceview播放全屏视频?
【发布时间】:2012-04-30 05:40:40
【问题描述】:

我正在使用 surfaceview 播放本地 mp4 视频,这里是布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<SurfaceView
    android:id="@+id/surface"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
</SurfaceView>

</FrameLayout>

从代码中我将全屏设置为surfaceview

    int height = getWindowManager().getDefaultDisplay().getHeight(); //metrics.heightPixels;
    int width = getWindowManager().getDefaultDisplay().getHeight(); //metrics.widthPixels;

    mPreview = (SurfaceView) findViewById(R.id.surface);
    LayoutParams lp = new FrameLayout.LayoutParams(width, height);

    mPreview.setLayoutParams(lp);
    holder = mPreview.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    //holder.setFixedSize(width, height);
    holder.setSizeFromLayout();

但是,现在的问题是视频没有全屏播放,视频上方出现黑屏。

截图http://i.imgur.com/WNFDM.png 如何播放全屏视频?

【问题讨论】:

  • 您能告诉我为什么要动态设置大小...您已经在 xml 布局中设置了正确的参数。在您的 oncreate 函数中,如果您将设置全屏标志,那么它将自动将您的布局设置为全屏,而无需在运行时设置大小。我认为有一些与宽度和高度有关的问题。您可以尝试仅设置全屏标志吗?
  • 感谢您的 cmets,但设置标志无效。
  • 它没有全屏或视频没有开始播放。
  • 我不知道这是错误的还是故意的,但是您将宽度分配为使用的高度 int width = getWindowManager().getDefaultDisplay().getHeight();
  • 等一下,我给你截图。

标签: android video surfaceview


【解决方案1】:

不知道这是几岁.. 试试这个

requestWindowFeature(Window.FEATURE_NO_TITLE);  
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

在您的活动的 onCreate 方法上执行 setContentView 之前

【讨论】:

    【解决方案2】:

    试试

      mPreview = (SurfaceView) findViewById(R.id.surface);
      LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    
        mPreview.setLayoutParams(lp);
        holder = mPreview.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        holder.setSizeFromLayout();
    

    【讨论】:

    • 有什么办法可以将视频全屏显示,即使它不是高清视频?
    • 是的。即使不是高清视频,使用这些视频也只能全屏播放
    • @BharatSharma 是的。删除 setLayoutParams(lp) 也会全屏显示视频。
    【解决方案3】:

    你能试试这个吗?

                mPreview = (SurfaceView) findViewById(R.id.surface);
                holder = mPreview.getHolder();
                holder.addCallback(this);
    

    不要在你的 oncreate 中设置宽度和高度...

    【讨论】:

    • 这里全屏并不代表我要移除通知栏或标题栏。
    • 我尝试了不同的视频(高清),它正在全屏播放:)。即使不是高清视频,有什么方法可以将视频全屏显示吗?
    • 我从未尝试过,但在我的情况下,它总是根据表面尺寸自动设置。如果您对此有解决方案,请发布或在评论中给我一个线索。
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多