Android 如何使用cameraX在画布上绘制动画来实现所需的fps?
我使用的是CameraX,我想用CameraX用来显示预览的相同fps在画布上播放动画 问题1: 如果可能的话,我如何在2秒内以30 fps的速度播放60帧动画(例如) 问题2: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 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,谢谢。。考虑你的评论,就像一个答案,我会接受它。