VideoView 位于 SurfaceView 之上

2023-12-15

我尝试展示一个VideoView在一个上面SurfaceView。但它不可见,但会对点击做出反应(MediaController 出现并播放声音)。该视频似乎是在后面播放的SurfaceView所以我也尝试利用setZOrderMediaOverlay() and/or setZOrderOnTop()但一切都没有改变

当我进入主屏幕时,我在褪色动画中瞬间看到了 VideoView,所以它确实存在。

我用 xml 布局尝试过,也完全以编程方式尝试过,但没有任何效果。

这是我的活动:

public class VideoTest extends Activity {
    private RelativeLayout mLayout;
    private VideoView mVideo;
    private Handler mHandler;
    private FrameLayout mFrameLayout;
    private SurfaceView mSurfaceView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mFrameLayout = new FrameLayout(this);
        mFrameLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        mLayout = new RelativeLayout(this);
        mLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        mVideo = new VideoView(this);
        mVideo.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mSurfaceView = new SurfaceView(this);
        mSurfaceView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        mSurfaceView.setZOrderMediaOverlay(false);
        mSurfaceView.setZOrderOnTop(false);

        mFrameLayout.addView(mSurfaceView);
        mLayout.addView(mVideo);
        mFrameLayout.addView(mLayout);

        setContentView(mFrameLayout);

        // with xml
//        setContentView(R.layout.main);
//        mFrameLayout = (FrameLayout) findViewById(R.id.activity_reader);
//        mLayout = (RelativeLayout) findViewById(R.id.videoview);
//        mVideo = (VideoView) findViewById(R.id.video_view);
//        mSurfaceView = (SurfaceView) findViewById(R.id.surface_view);

        // Set the handler to me messaged from the threads
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg != null) {
                    mVideo.setMediaController(new MediaController(mVideo.getContext()));
                    mVideo.setVideoPath("/mnt/sdcard/myvideo.mp4");
                    if (mLayout.getVisibility() == View.VISIBLE) {
                        mLayout.setVisibility(View.GONE);
                    } else {
                        mLayout.setVisibility(View.VISIBLE);
                    }
//                    mFrameLayout.bringChildToFront(mLayout);
//                    mFrameLayout.bringChildToFront(mVideo);
//                    mFrameLayout.requestLayout();
//                    mFrameLayout.invalidate();
//                    mFrameLayout.postInvalidate();
//                    mVideo.requestFocus();
                }
                super.handleMessage(msg);
            }
        };
    }

    /** Inflate the menu */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.activity_reader_menu, menu);
            return true;
    }

    /** Handle menu items events */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.toggle_video:
                new Thread() {
                    public void run() {
                        mHandler.sendEmptyMessage(0);
                    };
                }.start();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

My xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_reader"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <SurfaceView android:id="@+id/surface_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <RelativeLayout android:id="@+id/videoview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone">
        <VideoView android:id="@+id/video_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
</FrameLayout>

一个提示:由于这只是一项测试,旨在找出它不起作用的原因,因此我尝试最小化真实应用程序中的代码,其中VideoView由一个处理程序控制,该处理程序从绘图线程获取消息SurfaceView。这就是为什么我在使用菜单时实现了一个发送消息的线程的原因。


根据,我不认为你可以有重叠的 SurfaceViews这个线程Android框架工程师的回答:

抱歉,你不能这样做——因为 表面景色很特别,不 真正的观点(表面是一个 单独的窗口按 Z 顺序排列 自己的),它们的 Z 顺序不匹配 你的意见。表面视图很大, 重物;你不打算 将 SurfaceView 像普通视图一样对待 这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VideoView 位于 SurfaceView 之上 的相关文章

  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • onclick 监听器(this)是什么意思?

    btn Login setOnClickListener this 在安卓工作室 我在无数地方见过这种情况 这是什么意思 我知道该怎样this运行 但是监听者叫什么 这个例子来自 Link https stackoverflow com q
  • 删除 CoordinatorLayout-Android 中多余的顶部空间

    我正在尝试使用BottomSheetBehavior制作类似于谷歌地图提供的布局 我成功地使用了BottomSheetBehavior并创建向上滑动布局 我现在遇到的问题是CordinatorLayout即使我的布局折叠 也会占用额外的空间
  • 无法在 extsd 卡中创建文件夹

    我有一个 Android 平板电脑 其中外部 SD 卡称为 mnt extsd 其内部存储称为 mnt sdcard 当我尝试通过以下代码在 mnt sdcard 中创建文件夹时 应用程序成功在根目录中创建文件夹 当我尝试在 mnt ext
  • 如何将 YYYY-MM-DDTHH:mm:ss.SSSZ 格式的时间转换为默认时区? [复制]

    这个问题在这里已经有答案了 我得到的时间格式为 2011 07 31T08 16 37 733Z 实际上Z应该是时区 然后将该时间转换为本地时区 我现在如何实际将此时间转换为默认时区 RFC 3339 描述了一个特定的ISO 8601 ht
  • 在父视图之外对子视图进行动画处理

    我试图在其父视图之外对视图进行动画处理 当我这样做时 子视图无法在其父视图之外进行动画处理 我通过使用解决了这个问题setClipChildren false 它起作用了 当视图动画时up 当我为视图设置动画时down图像仍然隐藏 这是有效
  • 在 Android 中动态填充年份的微调器?

    我一直在绞尽脑汁试图让它发挥作用 我想动态地将 1900 年到当前年份的年份输入到旋转器中 我认为使用 XML 定义的数组不可能做到这一点 但是我可以使用数组适配器来做到这一点吗 这是我到目前为止所拥有的 ArrayList
  • 发生存储异常。无法在firebase中上传图片

    在我能够更改图像并将其上传到 firebase 之前 这段代码就可以工作 但现在我突然收到此错误 我不知道问题是什么 public class SettingsActivity extends AppCompatActivity priva
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • 更改首选项的背景颜色

    我有一个PreferenceCategory xml 文件 我已经在其中定义了所有首选项 我从扩展的类中调用它PreferenceActivity 我无法设置设置屏幕的背景 该屏幕是在如下所示的 xml 文件的帮助下显示的 请看我已经定义了
  • fresco 的 Proguard 错误

    我正在使用 ProGuard 当我在发布配置中运行项目时 出现以下错误 Warning com facebook imagepipeline bitmaps DalvikBitmapFactory can t find referenced
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • 任务“:app:checkReleaseDuplicateClasses”执行失败

    我的 React Native Android 构建中突然出现构建问题 令人惊讶的是 它是早上建好的 没有做任何改变 但突然就失败了 这就是我得到的错误 知道为什么会发生这种情况吗 在 stack 和 GitHub 中也看到了一些类似的问题
  • 在屏幕上随机生成一个圆圈并将其设为绿色或红色

    所以我一直在尝试制作一个游戏应用程序 它可以在 Android 屏幕上随机显示带有文本的红色按钮或带有文本的绿色按钮 如果有人可以帮助我 我将不胜感激 另外 如果有人知道如何做到这一点 我想慢慢地产生更快的酷优势 谢谢 SuppressLi

随机推荐

  • 仅用于文件大小的 Windows 命令

    是否有 Windows 命令可以像这样输出指定文件的大小 以字节为单位 gt filesize test jpg 65212 我知道dir命令输出此信息 但它也输出其他信息 我可以轻松编写这样的程序 但如果可能的话 我更愿意使用本机 Win
  • PHP-如何在数组内合并数组[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 php中如何合并n个数组我的意思是我怎样才能完成这样的工作 array merge from result 0 to result count result 1 OR array me
  • Winforms:如何使用C#将图片上传到SQL Server数据库

    我想将图像上传到我的 SQL Server 数据库 我有两个按钮 一个图片框 使用浏览按钮 我可以从磁盘中选择文件 并将其显示在图片框中 问题是我无法将图片从图片框保存到数据库中 请帮我解决代码 欣赏它 您可以直接从其路径保存图像 您已经拥
  • python pandas 中的分块文件上的数百万个键上的 grouby 出现问题

    我有一个非常大的 CSV 文件 数十千兆 其中包含带有以下列的网络日志 user id time stamp category clicked 我必须构建一个记分器来识别用户喜欢和不喜欢的类别 请注意 我有超过 1000 万用户 我首先把它
  • 将转换器绑定到 Windows Phone 8 应用程序中的 XAML

    我的 xaml 页面代码
  • Math.max 和 Math.min 输出允许的最高和最低值

    所以我试图制作一个程序来输出总和 平均值 最小值和最大值 我基本上已经弄清楚了除了最小和最大值输出 2147483647 和 2147483647 之外的所有内容 我相信这是 Java 将计算的绝对最小和最大值 无论如何 我想计算用户输入的
  • 如何在警报对话框中设置警报文本大小

    默认情况下的警报消息对于屏幕较小的特定设备来说太大 我想将其设置为自定义 dp 我的警报是这样的 OnClickListener addNewItemListener new OnClickListener public void onCl
  • 嵌入仅限 Perl 的模块以及嵌入式 Perl 解释器

    我跟着https perldoc perl org perlembed并成功建立了interp二进制 当我使用static ext 输出目录有 pm文件安装到前缀目录中 如何添加自定义简单 pm模块如TLUtils pm无需将模块文件解压到
  • Python,字符串中字符的具体计数

    我正在尝试计算 python 中字符串出现的次数 我想采用二进制输入 例如 001101 然后计算 1 0 11 00 等的数量 我试图通过使用 count 来实现这一点 但是当我只希望它输出 1 1 和 1 11 时 这会输出有 3 个
  • Python 2.x 可选子解析器 - 错误参数太少

    我一直在尝试设置一个带有两个子解析器的主解析器 以便在单独调用时 主解析器会显示一条帮助消息 def help message print help message import argparse parser argparse Argum
  • C 中二分查找的第一次和最后一次出现

    我试图了解如何修改二进制搜索 使其适用于第一次和最后一次出现 当然我可以在网上找到一些代码 但我试图深入理解 这里是一些基本的非递归二进制搜索我发现 int BinarySearch int array int number of elem
  • 更改快速选择器的悬停颜色

    是否可以通过设置更改快速选择器所选选项的颜色 要保留当前主题并仅更改此颜色 请在设置中找到 工作台 颜色自定义 然后单击 在 settings json 中编辑 然后将以下内容添加到屏幕右侧的用户设置中 workbench colorCus
  • 推荐的c# winform控件包[关闭]

    Closed 这个问题是无关 目前不接受答案 我正在寻找商业 免费推荐的 c winform 控件包 开发快递 我试过了组件一 DevExpress 和Telerik
  • 将 NSString 绘制到 UIImage

    我有一个 NSString 对象 我想将其写入现有的 UIImage 对象 UIImage 对象已经有一些与之关联的图像 我想将字符串写入同一张图像 我如何实现它 编辑 以下是实现编辑 UIImage 并在其上写入文本的基本步骤 从 UII
  • Tomcat 使用 Windows 证书存储进行 SSL

    我使用 Tomcat 9 0 10 并希望使用 Windows 证书存储来保存 SSL 私钥和证书 有这里是另一个线程 这似乎有答案 但是启动 Tomcat 时出现异常 我的 server xml 如下所示
  • 如何捕获Retrofit android中的异常

    我已将类定义如下 我在这里使用了 dagger 和 Retrofit 我正在尝试做什么 我正在努力抓住OfflineException在下面的请求中 如何在主活动中正确捕获它 请求拦截器 java public class RequestI
  • 通过更改 Android 中的应用程序语言来更改默认手机语言?

    有没有办法通过更改应用程序的语言来更改手机的语言 我的意思是 当我更改应用程序的语言时 默认手机语言也会更改 对此有什么想法请在这里分享 提前致谢 我不知道它可以通过编程方式更改 但是在更改应用程序语言后 您也可以要求用户更改设备语言 要求
  • 使用 MySql、PHP 和 ADODB 在准备好的语句中参数化 IN 子句

    我正在编写一些 SQL 并使用 AdoDb 连接到我的数据库并运行查询等 我正在使用参数化查询并遇到了障碍 它们是一种将值数组传递给 AdoDb MySql 中的 in clause 进行参数化的方法 我的问题是 如果我传递一个准备好的字符
  • 在 C/C++ 中编写“指向某物的指针”的好方法

    在 C C 中是否有一种 好 的方法来编写 指向某物的指针 我用来写void foo char str 但有时我发现这很不合逻辑 因为str是 指向 char 的指针 那么附加 应该更合乎逻辑 到类型名称 指针的书写有规则吗 char st
  • VideoView 位于 SurfaceView 之上

    我尝试展示一个VideoView在一个上面SurfaceView 但它不可见 但会对点击做出反应 MediaController 出现并播放声音 该视频似乎是在后面播放的SurfaceView所以我也尝试利用setZOrderMediaOv