我正在研究针对 Android 2.2 的自定义补间效果。这不是一个直接的 View 动画(很多事情都是基于补间的进度而发生的),因此 2.2 中可用的 Animation 类是不够的(显然 Animator 可以这样做但不可用)。
我已经实现了基本逻辑(移植我之前编写的 JS 和 AS 补间引擎),它似乎工作正常,但有点慢。例如,在 JS 或 AS 中运行 25ms 的间隔会产生平滑的视觉效果,但在 Android 实现中看起来“矮胖”——将间隔减少到 10ms 似乎有所帮助,但它肯定不如内置的平滑动画。
我正在使用 Timer 和 Timer 任务 - 我读到 ScheduledThreadPoolExecutor 是“首选”,但从我读到的内容来看,优势似乎更多地与异常处理和多个任务有关(我只会补间跑)。
Timer 是不是特别慢?如果ScheduledThreadPoolExecutor效率更高呢?还有我不知道的其他更好的选择吗?
蒂亚
最佳答案
对于 future 的搜索者,答案是直接使用 Handler 和 sendMessage(没有延迟)。
经过大量实验,包括线程、定时器、执行器等,最好的性能、最可预测的结果和最简单的代码基本上就是:
private Handler handler = new Handler() {
@Override
public void handleMessage(final Message message) {
switch (message.what) {
case TWEEN:
try {
double progress = timeKeeper.getEasedProgress(5);
float position = (float) originalValue + ((destinationValue - originalValue) * progress));
setValue(position);
if(!timeKeeper.atEnd()){
sendEmptyMessage(TWEEN);
}
} catch (Exception e) {
}
}
}
};
其中 originalValue
、destinationValue
和 setValue
只是处理补间增量的任意成员。 timeKeeper
是一个非常简单的类,它只测量耗时,并返回增量(耗时/持续时间)。 getEasedProgress
只是对该增量应用一些基本的缓动插值。
感谢来自 google android 开发人员邮件列表的 pskink 为我指明了正确的方向。
关于Android 自定义补间 - Timer 与 ScheduledThreadPoolExecutor 或替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234755/