Android 自定义补间 - Timer 与 ScheduledThreadPoolExecutor 或替代方案

标签 android

我正在研究针对 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) {
            }
        }               
    }
};

其中 originalValuedestinationValuesetValue 只是处理补间增量的任意成员。 timeKeeper 是一个非常简单的类,它只测量耗时,并返回增量(耗时/持续时间)。 getEasedProgress 只是对该增量应用一些基本的缓动插值。

感谢来自 google android 开发人员邮件列表的 pskink 为我指明了正确的方向。

关于Android 自定义补间 - Timer 与 ScheduledThreadPoolExecutor 或替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234755/

相关文章:

android - Android Studio 中的 Gradle 错误 : Plugin with id 'com.android.library' not found

Android EditText淡出溢出文本

javascript - JavaScript 与 Java 中的动画图像对比

android - 在 Android Lollipop 上使用 NFC 激活设备所有者

java - 为什么我不能在 Android Studio 中导入 java.util.function 包?

android - 离线时日志中反复出现 Firebase 存储 FirebaseApiNotAvailableException

java - 运行项目时出现Android Studio "ClassNotFoundException"

android - 安排我的 AsyncTask

java - 带文字的自定义市场、Google map

android - React Native 键盘事件不适用于 android :windowSoftInputMode ="adjustNothing"