Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用cameraX在画布上绘制动画来实现所需的fps?_Android_Camera_Frame Rate - Fatal编程技术网

Android 如何使用cameraX在画布上绘制动画来实现所需的fps?

Android 如何使用cameraX在画布上绘制动画来实现所需的fps?,android,camera,frame-rate,Android,Camera,Frame Rate,我使用的是CameraX,我想用CameraX用来显示预览的相同fps在画布上播放动画 问题1: 如果可能的话,我如何在2秒内以30 fps的速度播放60帧动画(例如) 问题2: 如何获取CameraX fps?关于第一个问题,请在您的SurfaceTexture中添加一个侦听器,然后收听OnSurfaceTextureUpdate。可以使用此方法作为参考,以了解何时渲染动画 关于第二个问题,据我所知,CameraX中并没有API来获取FPS,因为相机预览的FPS是可变的。只有视频录制具有固定的

我使用的是CameraX,我想用CameraX用来显示预览的相同fps在画布上播放动画

问题1: 如果可能的话,我如何在2秒内以30 fps的速度播放60帧动画(例如)

问题2:
如何获取CameraX fps?

关于第一个问题,请在您的SurfaceTexture中添加一个侦听器,然后收听OnSurfaceTextureUpdate。可以使用此方法作为参考,以了解何时渲染动画

关于第二个问题,据我所知,CameraX中并没有API来获取FPS,因为相机预览的FPS是可变的。只有视频录制具有固定的FPS值,对于不同的相机预览模式,FPS是可变的。另一方面,camera2 API可以配置FPS范围(最小-最大),因此我猜CameraX API也会有类似的功能

您也可以使用onSurfaceTextureUpdated方法动态计算FPS。在互联网上,你会发现许多页面显示如何计算FPS。 这里是一个小例子,代码未经测试,但应该指导您。在onSurfaceTextureUpdated中调用该方法,经过几次迭代后,应该会得到活动的FPS

private long lastFpsTime = 0L;
private float fps;

private void computeFPS()
{
    if (this.lastFpsTime != 0L)
    {
        this.fps = 1000.0f / (SystemClock.elapsedRealtime() - this.lastFpsTime);
    }

    this.lastFpsTime = SystemClock.elapsedRealtime();
}

但第二个问题是什么?@PerracoLabs,我有以下代码示例:
preview.setonpreviewOutUpdateListener(output->{ViewGroup parent=(ViewGroup)cameraView.getParent();parent.removeView(cameraView);parent.addView(cameraView,0);SurfaceTexture SurfaceTexture=output.getSurfaceTexture();SurfaceTexture.setOnFrameAvailableListener(surfaceTexture1->frameAvailable());cameraView.setSurfaceTexture(SurfaceTexture);}但我的方法frameAvailable()在开始时只执行一次。请尝试侦听onSurfaceTextureUpdated,此方法应在每个工作的frameAvailable()上触发。你对第二个有什么想法吗?@PerracoLabs,谢谢。。考虑你的评论,就像一个答案,我会接受它。