Предварительный просмотр в Custom Camera kotlin - PullRequest
0 голосов
/ 11 октября 2018

Проектирование кастом камеры.Возникла проблема с предварительным просмотром.У меня есть 2 класса: CameraActivity, CameraPreview .То же самое, что и здесь .

. После захвата фотографии фотография сохраняется, и предварительный просмотр останавливается, и ничего не происходит, но после повторного щелчка фотография отсутствует, и предварительный просмотр восстанавливает работу.

Как это исправить?Может быть, я не правильно использую Preview Preview?

CameraActivity.kt

class CameraActivity(context: Context, frame : FrameLayout) {

    private var mCamera: Camera? = null       
    private lateinit var mPreview: SurfaceView

    init{
        setCamerasId()
        initCamera(mCameraIdBack) 
    }
    private fun getCameraInstance(id : Int): Camera? {
        return try {
            Camera.open(id)
        } catch (e: Exception) {null}
    }

    private fun initCamera(id : Int){
        mCamera = getCameraInstance(id)
        mPreview = CameraPreview(mContext, mCamera!!)
        mFrame.addView(mPreview)
    }

    fun takePhoto() {
        try {
            mCamera?.takePicture(null, null, mPicture)
        } catch (e : Exception){
            Toast.makeText(mContext, "Error capture photo", Toast.LENGTH_SHORT).show()
        }
        try {
            mCamera?.startPreview()
        } catch (e : Exception){
            Toast.makeText(mContext, "Error start preview", Toast.LENGTH_SHORT).show()
        }

        mPictureFile = null
    }
    private val mPicture = Camera.PictureCallback { data, _ ->
        mPictureFile = getOutputMediaFile() ?: run {
            return@PictureCallback
        }
        try {
            Toast.makeText(mContext, "Success", Toast.LENGTH_SHORT).show()
            val fos = FileOutputStream(mPictureFile)
            fos.write(data)
            fos.close()
            addImageToGallery(mPictureFile!!.path, mContext)
            callShutterSound()

        } catch (e: Exception) {}
    }

CameraPreview.kt

class CameraPreview(
        private var mContext: Context,
        private var mCamera: Camera
) : SurfaceView(mContext), SurfaceHolder.Callback {
    private val mHolder: SurfaceHolder = holder.apply {
        addCallback(this@CameraPreview)
        setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)
    }

    override fun surfaceCreated(holder: SurfaceHolder) {
        mCamera.apply {
            try {
                setParameters()
                setPreviewDisplay(holder)
                startPreview()
            } catch (e: Exception) {}
        }
    }
    override fun surfaceDestroyed(holder: SurfaceHolder) {
        mCamera.release()
    }

    override fun surfaceChanged(holder: SurfaceHolder, format: Int, w: Int, h: Int) {
        if (mHolder.surface == null) {
            return
        }
        try {
            mCamera.stopPreview()
        } catch (e: Exception) {}
        mCamera.apply {
            try {
                setParameters()
                setPreviewDisplay(mHolder)
                startPreview()
            } catch (e: Exception) {}
        }
    }
}

1 Ответ

0 голосов
/ 16 октября 2018

Задержка потребовалась для корректного отображения превью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...