【问题标题】:MediaPlayer inside SurfaceView only shows a little peace in Tablet bq 10 inchesSurfaceView里面的MediaPlayer只在Tablet bq 10英寸中显示了一点平安
【发布时间】:2014-10-17 11:00:21
【问题描述】:

您可以在下一个链接中看到: https://www.dropbox.com/s/5qdu28byz0luxyu/Screenshot.png?dl=0

它只显示了我的 SurfaceView 的一部分。我已经像下一个 xml 一样定义了 SurfaceView:

<RelativeLayout
    android:id="@+id/rel_page0"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusableInTouchMode="true" >

<SurfaceView
    android:id="@+id/video0_0p"
    android:layout_width="fill_parent"
    android:layout_height="470dp"
    android:layout_alignParentTop="true"
    android:adjustViewBounds="true"/>
...

我的 java 代码使它工作是:

sv.getHolder().addCallback(new Callback() {

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mediaPlayer.release();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mediaPlayer.setVolume(0, 0);
        playVideoDelay(mediaPlayer, sv, path);                  
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder,
        int format, int width, int height) {
    }
});

//The method called is:
private void playVideoDelay(final MediaPlayer videoView,
    final SurfaceView sv, Uri uri) {
    try {
        videoView.setDataSource(getActivity().getApplicationContext(), uri);
        sv.getHolder().setFormat(PixelFormat.OPAQUE);
        videoView.setDisplay(sv.getHolder());
        videoView.prepare();
        if (Build.VERSION.SDK_INT >= 16)
            videoView
                .setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
        if (currentPositionVid > 0) {
            videoView.seekTo(currentPositionVid);
        }
        videoView.start();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

它在我的旧平板电脑 Samsung Galaxy 10.1 中运行,但在我的平板电脑 bq Edison 3 中运行不佳(如您在上一个链接中看到的那样)。

【问题讨论】:

  • 如果你使用 SurfaceView#setZOrderOnTop(),你看到完整的东西了吗?我想知道这是窗口大小问题还是重叠布局问题。
  • 您的解决方案有效,但现在 Surface 位于顶部并且按钮(播放和重复)被 SurfaceView 隐藏。我不能把他们带到前线。任何想法@fadden?
  • SurfaceView 的表面位于 View 元素的下方或上方。看来您的 View 元素正在遮挡表面。您需要修改布局,使它们不重叠,或者为您的视图提供透明背景,以便 SurfaceView 表面将显示出来。
  • 我在这个链接中找到了一个解决方案:stackoverflow.com/questions/19727087/… 通过在 SurfaceView 视频上使用按钮作为 SurfaceView。当然为每个按钮(SurfaceView)调用方法 setZOrderMediaOverlay(true)

标签: android media-player surfaceview tablet


【解决方案1】:

最后,通过阅读大量帖子、Android 文档和其他东西;我了解到,当您在 Adroid 中使用超过两层时(每一层可以由图像、按钮、视图、SurfaceView 或其他高级图形组件组成,例如我的情况),您必须小心,因为 android 渲染有时不会知道每一层的权重和一些元素的正确顺序。

所以就我而言,我尝试在具有背景的图层上显示 SurfaceView(上面有一些按钮和图像),上面有一些图像按钮等。有时图层画得很好,但有时没有。其实这个问题在图层行为表单中确实很难解决,所以我重新构建了所有界面,将所有按钮和图像放在SurfaceView之外。

https://www.dropbox.com/s/pb7hn32cx9y2eak/Screenshot_2015-01-12-14-21-29.png?dl=0

希望对您有所帮助!问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多