在保持响应的同时无限重复功能 GUI 调用的选项
Options for endlessly repeating function GUI calls while remaining responsive
我要执行一个动画,其中包含一些水平对齐的箭头,其中箭头的 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 look 中执行,这将锁定 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
您绝对不应该使用任何循环或计时器。有很多内置的 类 可以帮助您激活视图。例如,您可以使用 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);
}
});
我要执行一个动画,其中包含一些水平对齐的箭头,其中箭头的 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 look 中执行,这将锁定 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
您绝对不应该使用任何循环或计时器。有很多内置的 类 可以帮助您激活视图。例如,您可以使用 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);
}
});