【问题标题】:Android: How to make circle-shaped Camera Preview?Android:如何制作圆形相机预览?
【发布时间】:2015-05-21 10:03:52
【问题描述】:

我怎样才能像这样创建圆形/椭圆形或圆角的相机预览(中间的圆圈应该是相机预览)?

伦敦图像用按钮和视图代表 UI 的其余部分,所以 它必须是可见的 整体,这就是为什么我不能使用像这样的解决方案添加 android:background 作为半径像这样的形状矩形:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dip" android:color="#B1BCBE" />
    <corners android:radius="50dip"/>
    <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>

当我尝试将android:background 设置为 SurfaceView 的椭圆形 xml 时,它也不起作用:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <size
        android:width="120dp"
        android:height="120dp"/>

    <stroke
        android:color="#FF000000"
        android:width="2dp" />
</shape>

如果有可能以某种方式扩展 SurfaceView 并使用它,请问我应该重写什么?

【问题讨论】:

    标签: android camera surfaceview preview


    【解决方案1】:

    嗯,我认为最简单的方法是在 SurfaceView 上放置一个 imageView xml 示例:

    <RelativeLayout ....>
      <SurfaceView ... />
      <ImageView ... />
    </RelativeLayout>
    

    【讨论】:

    • 背景图片(伦敦)代表我的 UI,这些东西必须在后台。
    • 为什么他们必须在后台?为什么不能用那个 ImageView 做一个透明的圆孔,让 SurfaceView 的表面通过它显示出来? (或者只是在 SurfaceView 的 View 上使用 draw,它只不过是一个透明的矩形。)
    • 很抱歉,imageview 包含一个带有透明圆圈的图像,您可以使用 PNG 图像
    • @2rec 您找到解决方案了吗?我也在尝试创建圆形相机预览。
    • @Sunshinetpu 还没,是吗?
    【解决方案2】:

    您可以像这样使用 CardView 来放置您的 textureView 或 surfaceArea。

    <androidx.cardview.widget.CardView
            android:id="@+id/cameraWrapper"
            android:layout_width="300dp"
            android:layout_height="300dp"
            app:cardCornerRadius="360dp"
            android:foreground="@drawable/background_camera_overlay_circle_inactive"
            app:cardElevation="0dp"
            android:padding="-20dp">
    
            <com.mobile.myapp.CustomViews.CameraSourcePreview //you can use SurfaceView, TextView, ImageView
                android:id="@+id/preview"
                android:layout_width="400dp"
                android:layout_height="400dp"/></androidx.cardview.widget.CardView>
    

    需要注意的关键事项。

    • cornerRadius 设置为 360 以使 CardView 具有圆形
    • cardElevation 设置为零以移除高度,从而使 CardView 变平
    • padding 设置为负值,以便很好地隐藏子视图
    • 子视图的layout_widthlayout_height 值大于cardView 的值。
    • CardView 有一个前景属性,该属性已设置为可绘制文件background_camera_overlay_circle,它只是绘制圆形边框

    background_camera_overlay_circle的内容

    <?xml version="1.0" encoding="utf-8"?>
        <shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
         <stroke android:width="5dp" android:color="@color/colorRed_FB7B7B"/>
      </shape>
    

    试一试。

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 2023-04-10
      • 1970-01-01
      • 2014-06-01
      • 2017-12-21
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多