Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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动画(Kotlin)制作自定义插值器?_Android_Kotlin - Fatal编程技术网

如何为Android动画(Kotlin)制作自定义插值器?

如何为Android动画(Kotlin)制作自定义插值器?,android,kotlin,Android,Kotlin,粗略地说,这是我的代码,归结为相关部分: fun动画(电视:文本视图){ var animationSlide=TranslateAnimation(0.0f、0.0f、100.0f、0f) var animationScale=ScaleAnimation(1.0f、1.0f、0.0f、1.0f) animationSlide.interpolator=加速器插值器()//需要自定义插值器吗 animationScale.interpolator=减速插补器()//需要自定义插补器吗 anim

粗略地说,这是我的代码,归结为相关部分:

fun动画(电视:文本视图){
var animationSlide=TranslateAnimation(0.0f、0.0f、100.0f、0f)
var animationScale=ScaleAnimation(1.0f、1.0f、0.0f、1.0f)
animationSlide.interpolator=加速器插值器()//需要自定义插值器吗
animationScale.interpolator=减速插补器()//需要自定义插补器吗
animationSlide.duration=1000
animationScale.duration=1000
var animationSet=animationSet(false)
animationSet.addAnimation(animationSlide)
animationSet.addAnimation(animationScale)
电视开始动画(动画集)
}
是否可以制作一个接受点数组的自定义插值器,或一个接受时间输入并返回该时间点值的lambda函数?Android文档只显示了一小部分插值器,没有一个插值器可以定制为通用函数曲线


谢谢你的帮助

这是通过创建一个实现插值器的类来实现的。或者您可以使用SAM转换的lambda。例如,基于函数的插值:

animationSlide.setInterpolator { amount ->
    amount * amount * (3f - 2f * amount)
}

如果要定义一组点来定义曲线,可以使用Path类进行定义,并使用该类实例化PathInterpolator。从源代码看,PathInterpolator似乎通过将路径分解为直线段来近似路径,因此如果存在圆弧和贝塞尔曲线,它可能会成为一个沉重的类实例,如果您重复使用它,您可能需要缓存引用。

很抱歉,接受这个答案花了这么长时间。它的工作原理与预期完全一致。遗憾的是,似乎没有与iOS相当的版本。谢谢