19

我有一个以纵向模式播放的视频。在视频的最后,我需要展示一些关于它的视图。到目前为止,这工作正常。

但是,我遇到了一个问题,即在关闭屏幕后返回活动时,视频最后一帧的视图无法正确重绘,然后再次打开,然后解锁屏幕。

我观察到的是,当屏幕重新打开并且我解锁时。我的视频和图像首先在全屏模式之外渲染(状态栏仍然显示),然后屏幕将进入全屏模式,将所有视图向上移动并导致伪影。

似乎视图在渲染后通过转换到全屏而被移出视图边界。

我真的很困惑如何防止这种情况发生。

这是 github 上的沙盒项目,以避免使这篇文章充满代码。

该项目的基本设置是这样的:

片段活动在其布局上有一个视频视图和一个按钮视图。然后它将片段添加到 contentView 容器中。contentView 在视频播放结束前 1 秒淡出。

一切正常,问题是在打开和关闭屏幕后返回应用程序。

此外,有时视频会完全退出,将视图留在黑色背景上。

提前感谢您提供的任何帮助。

正确渲染视频视图

这是关闭、重新打开和解锁屏幕时发生的伪影。请注意,我必须为它拍照。在 DDMS 上,屏幕截图工具可以正确查看图像。

伪像

4

3 回答 3

3

您可以选择在用户唤醒手机后解锁键盘锁时接收事件,而不是阻止屏幕关闭。

此时,对两个视图调用View.invalidate可能是个好主意,这会导致重绘。锁定屏幕启动时,绘制链非常不稳定,因为您的应用在技术上是可见的,就在锁定屏幕下方。

    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context ctx, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_USER_PRESENT))

        }
    }, new IntentFilter(Intent.ACTION_USER_PRESENT));
于 2012-04-04T21:56:55.907 回答
0

看起来覆盖布局已被控制器栏移动。
您不认为它受到控制器(播放/暂停/ff/rew + 进度)区域的影响吗?

于 2012-02-13T04:59:41.167 回答
0

可能有一种方法可以防止屏幕在第一位置关闭,因为这将很好地解决您的重新绘制问题,希望这会有所帮助。

于 2012-03-14T12:40:55.573 回答