【问题标题】:Options for endlessly repeating function GUI calls while remaining responsive在保持响应的同时不断重复函数 GUI 调用的选项
【发布时间】:2015-07-21 21:17:26
【问题描述】:

我有一个动画要执行,它由一些水平对齐的箭头组成,其中箭头的 alpha 值将改变以实现动画效果(即第一个箭头的 alpha 值为 1.0,然后第二个箭头的值为 1.0 等等.).

如果我有这样的功能:

void highlightFirstArrow()
{
    mArrow1.setAlpha(1.0f);
    mArrow2.setAlpha(0.75f);
    mArrow3.setAlpha(0.50f);
    mArrow4.setAlpha(0.20f);
}

然后我想开始,重复无数次,然后停止这样的功能:

void animateArrows()
    {
    highlightFirstArray();
    pause;
    highlightSecondArray();
    pause;
    etc.
    }

如果在 for 中执行,显然这会锁定 GUI 线程。实现所需动画的选项有哪些:

- run a for loop in a separate thread 
- don't use a loop, instead constantly execute the functions individually via a timer
- use built in specific android animation mechanisms. If so which is most appropriate? Would AnimatorSet() be good for this scenario, or something else

【问题讨论】:

  • 当你想在 Android UI 线程上重复做某事时,正确的解决方案几乎总是Handler#postDelayed(...)。你应该可以找到很多关于它的帖子。
  • 如果您的箭头是 ImageViews,请考虑使用 ImageView.setAlpha(int) 以获得更好的性能。
  • setAlpha(int) 现已弃用

标签: android android-animation android-gui


【解决方案1】:

您绝对不应该使用任何循环或计时器。有很多内置类可以帮助您为视图设置动画。例如你可以使用ValueAnimator:

ValueAnimator.ofFloat(1f, 0.2f).setDuration(1000).addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override public void onAnimationUpdate(ValueAnimator animation) {
        float value = (float) animation.getAnimatedValue();
        arrow1.setAlpha(value);
        arrow2.setAlpha(value);
    }
});

【讨论】:

    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多