gpt4 book ai didi

android - SurfaceView 的替代品?

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:58 24 4
gpt4 key购买 nike

我正在制作一个自定义 ProgressBar,它有一个旋转的位图。如果我使用 View.invalidate FPS 会断断续续; deltaTime 会上升 40 多次。逻辑和渲染几乎是瞬时的,但无效调用使其变慢。所以我正在尝试 SurfaceView,问题是我之前在将 SurfaceViews 与其他 Views 组装时遇到了问题,我不想使用它。是否有 SurfaceView 和 View.invalidate 的替代方案,或者我是否坚持使用它们?

编辑:

为了进一步说明,我制作了一个自定义 View ,它是一个中级 ProgressBar。所以View就是ProgressBar。我现在也没有下载任何东西,我只是想为我的 View 获得最大 FPS。一些代码:

MyProgressBar extends View implements Runnable

还有 run()

calculateNewRotation();
invalidate();
post(this);

其中calculateNewRotation()

long now = SystemClock.uptimeMillis();
int deltaTime = (int) (now - mLastRender);
mLastRender = now;
mSpinRotation += deltaTime * SPIN_SPEED_PER_MILLISECOND_CLOCKWISE;

Post(this) 指的是 MyProgressBar,它将一直循环直到我另有说明。

在我的 onDraw() 中

mCamera.save();
mCamera.rotateZ(mSpinRotation);
mCamera.getMatrix(mMatrix);
mCamera.restore();

mMatrix.preTranslate(-mTranslatePivotX, -mTranslatePivotY);
mMatrix.postTranslate(mTranslatePivotX + mCenterX, mTranslatePivotY + mCenterY);

canvas.drawBitmap(mSpinBitmap, mMatrix, mSpinBitmapPaint);

calculateNewRotation() 的时间 = 1 毫秒。

onDraw() 的时间 = 1 毫秒。

问题是总时间通常超过 40 毫秒。我的解决方案是然后使用 SurfaceView,但我不喜欢这样的想法,即使用透明像素绘制其表面的 View ,以便显示底层表面。我正在寻找的是一个 View ,我可以随时获取 Canvas ,最好每 16 毫秒获得 60 FPS。现在有这样的View吗?

最佳答案

您是否在 UI 线程上执行长时间操作(通常是需要进度条的原因)?您的 UI 线程应该更新进度条,而另一个线程或异步任务处理长时间操作。

关于android - SurfaceView 的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com