代码之家  ›  专栏  ›  技术社区  ›  HelloCW

为什么CameraXBasic项目不将两个布局文件合并为一个?

  •  0
  • HelloCW  · 技术社区  · 5 年前

    project Github

    这个 摄影机片段.kt 荷载 碎片_宽高比 摄像头用户界面_容器.xml .

    我觉得很奇怪 project不会同时合并两个布局文件 碎片_宽高比 合二为一 摄影机片段.kt

    摄影机片段.kt

    class CameraFragment : Fragment() {
        override fun onCreateView(
                inflater: LayoutInflater,
                container: ViewGroup?,
                savedInstanceState: Bundle?): View? =
                inflater.inflate(R.layout.fragment_camera, container, false)
    
        private fun updateCameraUi() {
    
            // Remove previous UI if any
            container.findViewById<ConstraintLayout>(R.id.camera_ui_container)?.let {
                container.removeView(it)
            }
    
            // Inflate a new view containing all UI for controlling the camera
            val controls = View.inflate(requireContext(), R.layout.camera_ui_container, container)
            ..
       }
    }
    

    碎片_宽高比

     <androidx.constraintlayout.widget.ConstraintLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/camera_container"
            android:background="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <TextureView
                android:id="@+id/view_finder"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    
        </androidx.constraintlayout.widget.ConstraintLayout>
    

    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/camera_ui_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <!-- Camera control and gallery buttons -->
        <ImageButton
            android:id="@+id/camera_switch_button"
            android:layout_width="@dimen/round_button_medium"
            android:layout_height="@dimen/round_button_medium"
            android:layout_marginBottom="@dimen/margin_xlarge"
            android:layout_marginLeft="@dimen/margin_small"
            android:padding="@dimen/spacing_small"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            app:srcCompat="@drawable/ic_switch"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/switch_camera_button_alt" />
    
        <ImageButton
            android:id="@+id/camera_capture_button"
            android:layout_width="@dimen/round_button_large"
            android:layout_height="@dimen/round_button_large"
            android:layout_marginBottom="@dimen/shutter_button_margin"
            android:scaleType="fitCenter"
            android:background="@drawable/ic_shutter"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/capture_button_alt" />
    
        <ImageButton
            android:id="@+id/photo_view_button"
            android:layout_width="@dimen/round_button_medium"
            android:layout_height="@dimen/round_button_medium"
            android:layout_marginBottom="@dimen/margin_xlarge"
            android:layout_marginRight="@dimen/margin_small"
            android:padding="@dimen/spacing_large"
            android:scaleType="fitCenter"
            android:background="@drawable/ic_outer_circle"
            app:srcCompat="@drawable/ic_photo"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/gallery_button_alt" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    添加的内容

    摄影机片段.kt(新)

    private fun updateCameraUi() {
    
            // Remove previous UI if any
           // container.findViewById<ConstraintLayout>(R.id.camera_ui_container)?.let {
            //    container.removeView(it)
            //}
    
            // Inflate a new view containing all UI for controlling the camera
            //val controls = View.inflate(requireContext(), R.layout.camera_ui_container, container)
    
            // Listener for button used to capture photo
             ...
    }
    

    碎片_照相机.xml新的

    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/camera_container"
        android:background="@android:color/black"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextureView
            android:id="@+id/view_finder"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <!-- Camera control and gallery buttons -->
        <ImageButton
            android:id="@+id/camera_switch_button"
            android:layout_width="@dimen/round_button_medium"
            android:layout_height="@dimen/round_button_medium"
            android:layout_marginBottom="@dimen/margin_xlarge"
            android:layout_marginLeft="@dimen/margin_small"
            android:padding="@dimen/spacing_small"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            app:srcCompat="@drawable/ic_switch"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/switch_camera_button_alt" />
    
        <ImageButton
            android:id="@+id/camera_capture_button"
            android:layout_width="@dimen/round_button_large"
            android:layout_height="@dimen/round_button_large"
            android:layout_marginBottom="@dimen/shutter_button_margin"
            android:scaleType="fitCenter"
            android:background="@drawable/ic_shutter"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/capture_button_alt" />
    
        <ImageButton
            android:id="@+id/photo_view_button"
            android:layout_width="@dimen/round_button_medium"
            android:layout_height="@dimen/round_button_medium"
            android:layout_marginBottom="@dimen/margin_xlarge"
            android:layout_marginRight="@dimen/margin_small"
            android:padding="@dimen/spacing_large"
            android:scaleType="fitCenter"
            android:background="@drawable/ic_outer_circle"
            app:srcCompat="@drawable/ic_photo"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/gallery_button_alt" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    碎片_照相机.xml新大陆

    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/camera_container"
        android:background="@android:color/black"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextureView
            android:id="@+id/view_finder"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <!-- Camera control and gallery buttons -->
        <ImageButton
            android:id="@id/camera_switch_button"
            android:layout_width="@dimen/round_button_medium"
            android:layout_height="@dimen/round_button_medium"
            android:layout_marginRight="@dimen/margin_xlarge"
            android:layout_marginBottom="@dimen/margin_small"
            android:padding="@dimen/spacing_small"
            android:scaleType="fitXY"
            android:background="@android:color/transparent"
            app:srcCompat="@drawable/ic_switch"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:contentDescription="@string/gallery_button_alt" />
    
        <ImageButton
            android:id="@id/camera_capture_button"
            android:layout_width="@dimen/round_button_large"
            android:layout_height="@dimen/round_button_large"
            android:layout_marginRight="@dimen/shutter_button_margin"
            android:background="@drawable/ic_shutter"
            android:contentDescription="@string/capture_button_alt"
            android:scaleType="fitXY"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <ImageButton
            android:id="@id/photo_view_button"
            android:layout_width="@dimen/round_button_medium"
            android:layout_height="@dimen/round_button_medium"
            android:layout_marginRight="@dimen/margin_xlarge"
            android:layout_marginTop="@dimen/margin_small"
            android:padding="@dimen/spacing_large"
            android:scaleType="fitXY"
            android:background="@drawable/ic_outer_circle"
            app:srcCompat="@drawable/ic_photo"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:contentDescription="@string/switch_camera_button_alt" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Alex Cohn    5 年前

    他们的想法是在每次配置更改时重新创建UI,而TextureView仍然存在。

        2
  •  1
  •   Waheed Nazir    5 年前

    你有没有注意到有两个XML摄像头用户界面_容器.xml一个文件用于纵向和横向,以实现不同的用户界面旋转。还有那条线

    //删除以前的UI(如果有)

    { container.removeView(it) }

    @亚历克斯·科恩

    如果只处理单个方向,则可以使用单个布局进行操作。