Android 如何设置PropertyImation的帧速率?

Android 如何设置PropertyImation的帧速率?,android,android-animation,Android,Android Animation,Android说你可以设置刷新率: 帧刷新延迟:可以指定刷新动画帧的频率。默认设置为每10毫秒刷新一次,但应用程序刷新帧的速度最终取决于系统的总体繁忙程度以及系统为底层计时器提供服务的速度 然而,它并没有告诉你怎么做。我到处都搜索过,但在ObjectAnimator、PropertyAnimator或Animator中没有这样的方法 编辑:我目前正在使用一个动画更新程序,它每5帧只反应一次- colorFade.addUpdateListener(new ValueAnimator.Animat

Android说你可以设置刷新率:

帧刷新延迟:可以指定刷新动画帧的频率。默认设置为每10毫秒刷新一次,但应用程序刷新帧的速度最终取决于系统的总体繁忙程度以及系统为底层计时器提供服务的速度

然而,它并没有告诉你怎么做。我到处都搜索过,但在ObjectAnimator、PropertyAnimator或Animator中没有这样的方法

编辑:我目前正在使用一个动画更新程序,它每5帧只反应一次-

colorFade.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
       int interpolator = 0;

       @Override
       public void onAnimationUpdate(ValueAnimator animation) {
           if ((interpolator++) % 5 == 0)
                invalidate(mHandlerBounds);
        }
  });

正如@pskink所说,使用:

public static void setFrameDelay(long frameDelay)
是班上最好的学生。您可以在文档中看到:

动画每帧之间的时间量(以毫秒为单位)。这是动画将尝试遵守的请求时间,但帧之间的实际延迟可能不同,具体取决于系统负载和功能。这是一个静态函数,因为相同的延迟将应用于所有动画,因为它们都是单个计时循环的运行。当动画系统使用外部定时源(例如显示刷新率(vsync))来控制动画时,可以忽略帧延迟

您可以实现接口来创建自定义插值器,将经过的分数映射到表示帧速率的新分数。例如,我想旋转加载图像视图,向用户显示加载指示:

在该示例中,loadingView将以600毫秒的速度旋转360度。默认帧速率为(1000ms/10ms)。如果我不设置自定义插值器,loadingView将快速旋转,导致loadingView变成一个圆而不是一个指示。我需要使帧速率等于加载图像的“跳跃”,即12

我将动画持续时间映射到12个部分,接收到的经过分数将映射到包含分数的部分


因此,只需将12更改为您想要的帧速率,就可以实现最终帧速率。

请参阅
public static void setFrameDelay(long frameDelay)
我明白了-这是一个适用于所有动画的静态函数。这可能不是我想要的,因为我正试图降低小动画的帧速率,以便让大动画有更多的处理时间。@Yervant您找到解决方案了吗。我尝试了ValueAnimator.setFrameDelay(1000)来查看动画中的1fps。然而,它仍然相当顺利。(我不喜欢这样)。我认为该功能未按预期工作。已确认,相同的测试,无法降低帧速率。我从15%到20%的CPU使用率,也从20%到33%的CPU使用率。
ObjectAnimator animator = ObjectAnimator.ofFloat(loadingView, "rotation", 360f);
animator.setDuration(600);
animator.setInterpolator(new TimeInterpolator() {
    @Override
    public float getInterpolation(float input) {
        return (int)(input * 12) / 12.0f;
    }
});
animator.start();