我正在开发一个可同时显示2个视频的应用程序。右下角有一个小屏幕,另一个全屏(有点)。 当我在Android 6.0.1设备上运行video_view时,订单正常运行。但是,当我在较新的版本(例如Android 7)上运行它时,它的顺序不正确。同样,setZ()函数对我没有任何作用。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:orientation="horizontal">
<nl.hacker115.drivingwithdrivepro550.CustomVideoView
android:id="@+id/roadCamera"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<nl.hacker115.drivingwithdrivepro550.CustomVideoView
android:id="@+id/faceCamera"
android:layout_width="500dp"
android:layout_height="300dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:layout_gravity="bottom|end" />
</FrameLayout>
我要把faceCamera放在roadCamera的顶部,我该怎么做?
我的CustomVideoView.java看起来像这样
package nl.hacker115.drivingwithdrivepro550;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.VideoView;
public class CustomVideoView extends VideoView {
private PlayPauseListener mListener;
public CustomVideoView(Context context) {
super(context);
}
public CustomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setPlayPauseListener(PlayPauseListener listener) {
mListener = listener;
}
@Override
public void pause() {
super.pause();
if (mListener != null) {
mListener.onPause();
}
}
@Override
public void start() {
super.start();
if (mListener != null) {
mListener.onPlay();
}
}
public static interface PlayPauseListener {
void onPlay();
void onPause();
}
}
答案 0 :(得分:2)
这可能就是您想要的。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<nl.hacker115.drivingwithdrivepro550.CustomVideoView
android:id="@+id/roadCamera"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<nl.hacker115.drivingwithdrivepro550.CustomVideoView
android:id="@+id/faceCamera"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:layout_gravity="bottom|end"
android:layout_marginRight="16dp" />
</FrameLayout>
答案 1 :(得分:0)
我在这方面的知识非常有限,但是您遇到的问题如下:问题是因为VideoView
和GLSurfaceView
之类的视图需要/提供一个专用的绘图区域,并且不在“常规”的渲染管道,用于绘制UI小部件。他们显示的图像在稍后阶段被合成为最终图像。这个阶段尚不知道以哪种方式对视图进行布局。
我认为这是Android 6中的错误或未指定的行为,这些视图以什么顺序组合到最终图像上。
我能够重现您的问题并通过设置解决了该问题
faceCameraView.setZOrderMediaOverlay(true);
覆盖VideoView
上。
有关更多信息,请查看SurfaceView的类描述,它是VideoView
和GLSurfaceView
的基类。