ImageView/ImageButton 相机预览上的叠加层未显示

ImageView/ImageButton overlay on camera preview not displayed

此 link 中的非常标准的叠加层 tutorial 用于开发带叠加层的相机预览。但是,当我将 <Button/> 更改为 <ImageView/><ImageButton/> 时,图像不会显示。我得到的只是相机预览,同时使用 <ImageView/> 和使用 <ImageButton/> 图像没有显示,但是在应该显示图像的地方有小白线。图片显示在 mipmap-xxhdpi 中。这些按钮将用于启动另一个 activity 或在用户点击时拍照。

我在 Whosebug 上查看了问题,但答案 here 对我不起作用。

其他相关细节

minSdkVersion 是 16,compileSdkVersion 是 25。当我 运行 模拟器中的应用程序在 API-21 或以上时,我得到的是黑屏。

Q1:如何在相机预览上叠加<ImageView/><ImageButton/>

Q2: 黑屏是否与相机 API(旧)被弃用有关,我有构建单独的 类 以考虑不同的 API?

喜欢下面的代码

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    //do something
} else {
    //do something else
}

根据你的第一个问题,我认为问题是你使用的表面视图的高度大于 imageView 的高度并且等于 imageButton 因此在 ImageView 的情况下没有显示并且在情况下显示线条ImageButton(提示:think 3d)here 是 android material 设计高度和 shadows.Try 增加 ImageView 或 ImageButton 高度的指南。

现在回答你的第二个问题,应该不是因为老 API 尝试 this 回答。

所以我的问题还没有在模拟器中解决。但是,我能够接触到一系列设备 (5) 运行 API15,19,21,21,24。这是对我有用的代码。 API15是我把minSdkVersion改成15后才用的

使用给定的步骤 here 构建您的自定义相机。当您将编辑 XML。使用此代码

<?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">
<FrameLayout
    android:id="@+id/camera_preview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"/>

<ImageView
    android:id="@+id/button_capture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:src="@drawable/your_file_name"/>
</FrameLayout>

至于黑屏,必须在 API21 及更高版本的设备设置 (Settings->App->Select your app->Permisions->Camera) 中授予该应用程序权限。

编辑:在invalidating cache and restarting之后使用clean project.

获得了在模拟器中工作的相同代码