我正在构建一个Android应用程序。我使用的是OpenCV3的NativeCameraView
LayoutElement,我想在它上面放一个splash图像。
原来的布局是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/baseRelativeLayout">
<org.opencv.android.NativeCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:alpha="0.7"
android:id="@+id/color_blob_detection_activity_surface_view" />
</RelativeLayout>
它向我展示了使用Open CV的NativeCameraView的相机馈电。然后我可以用我喜欢的任何方式处理图像。
然而,我想在它的正上方添加一个splash图像叠加。我所做的是添加一个imageView,如下:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewSplashScreen"
android:alpha="0.7"
android:visibility="visible"
android:src="@drawable/screen_1"
android:contentDescription="splashScreen"/>
然而,即使设计"选项卡显示我的闪屏imageView在OpenCV的cameraView之上,我的应用程序根本不显示闪屏图像。
然后我尝试将openCV相机对象和ImageView放在单独的相对视图上,如:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/baseRelativeLayout">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewSplashScreen"
android:alpha="0.7"
android:visibility="visible"
android:src="@drawable/screen_1"
android:contentDescription="splashScreen"/>
</RelativeLayout>
<!--<org.opencv.android.JavaCameraView-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.opencv.android.NativeCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:alpha="0.7"
android:id="@+id/color_blob_detection_activity_surface_view" />
</RelativeLayout>
</RelativeLayout>
然而,即使我交换了它们的位置,这也不能很好地工作。
最后,我还使用了framayout:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/baseRelativeLayout">
<org.opencv.android.NativeCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/color_blob_detection_activity_surface_view"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewBitmapResult"
android:visibility="gone"
android:contentDescription="resultScreen"/>
</FrameLayout>
但无济于事。
如何解决这个布局问题?我觉得我忽略了一些简单的东西。
只需使用layout_above或layout_below。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+idrelativeLayout1">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewSplashScreen"
android:alpha="0.7"
android:visibility="visible"
android:src="@drawable/screen_1"
android:contentDescription="splashScreen"/>
</RelativeLayout>
<!--<org.opencv.android.JavaCameraView-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+idrelativeLayout1">
<org.opencv.android.NativeCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:alpha="0.7"
android:id="@+id/color_blob_detection_activity_surface_view" />
</RelativeLayout>
LinearLayout用于视图一个一个线性堆叠。
FrameLayout用于视图堆叠。
相对布局用于更复杂的视图。