首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android CameraX GLSurfaceView

Android CameraX GLSurfaceView
EN

Stack Overflow用户
提问于 2019-07-22 17:27:04
回答 2查看 1.4K关注 0票数 6

请有人提供CameraX库与GLSurfaceView结合使用的好例子,找不到任何信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-06 18:31:59

使用CameraX与自定义曲面/ TextureView的文档是不存在的。在CameraX的测试版发布之后,许多API都发生了变化,因此现有的在线示例只适用于alpha版本。使用带alpha-xx版本的纺织品视图/GLSUrfaceView的链接:https://github.com/android/camera-samples/tree/master/CameraXBasic

然而,这些样本不适用于最新的beta-02版本(截至今天)。

请参考下面的示例,该示例用于使用TextureView API创建CameraX。

等级依赖性:

代码语言:javascript
复制
dependencies{
def camerax_version = "1.0.0-beta02"
.....
    implementation "androidx.camera:camera-core:$camerax_version"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:$camerax_version"
    implementation "androidx.camera:camera-view:1.0.0-alpha09"
...
}

为预览创建一个活动:(Kotlin示例,但在Java中类似)

代码语言:javascript
复制
class Capture : AppCompatActivity(), CameraXConfig.Provider {
    // ur code


private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
    private lateinit var viewFinder: TextureView // Created in view file 
   // ur code


override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_capture)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

// CameraX related Code 
        cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        viewFinder = findViewById(R.id.view_finder)

        cameraProviderFuture.addListener(Runnable {
            val cameraProvider = cameraProviderFuture.get()
            bindPreview(cameraProvider)
        }, ContextCompat.getMainExecutor(this))

     // ur code here 
    }
}

private fun bindPreview(cameraProvider : ProcessCameraProvider) {
        var preview : Preview = Preview.Builder()
            .build()

        var cameraSelector : CameraSelector = CameraSelector.Builder()
            .requireLensFacing(CameraSelector.LENS_FACING_BACK)
            .build()
var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
        val surfaceTexture = (view_finder as TextureView).surfaceTexture
        val surface = Surface(surfaceTexture)
        val executor = Executors.newSingleThreadExecutor()
        val previewSurfaceProvider = PreviewSurfaceProvider(surface, executor)
        preview.setSurfaceProvider(executor,previewSurfaceProvider)
        cameraProvider.bindToLifecycle(this, cameraSelector, preview)
    }

现在创建一个SurfaceProvider类。

代码语言:javascript
复制
import android.view.Surface
import androidx.camera.core.Preview
import androidx.camera.core.SurfaceRequest
import androidx.core.util.Consumer
import java.util.concurrent.Executor
import java.util.concurrent.Executors

class PreviewSurfaceProvider (private val surface: Surface, private val executor: Executor): Preview.SurfaceProvider {

    override fun onSurfaceRequested(request: SurfaceRequest) {
        request.provideSurface(surface, executor, Consumer { result: SurfaceRequest.Result ->  {
            TODO("Not yet implemented")
        }})
    }

}

创建视图xml activity_capture.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    // Can be replaced with GLSurfaceView
    <TextureView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/view_finder"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2020-08-21 21:31:51

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57150974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档