【问题标题】:How to Fade In Fade Out text during a loading with Animator?如何在使用 Animator 加载期间淡入淡出文本?
【发布时间】:2020-05-04 17:35:55
【问题描述】:

我想在我的应用程序加载过程中淡入和淡出一些文本。 首先,我在一个带有计数器的循环中尝试了这个,但它不起作用。 我试过这个:

        int i = 0;
        for(i=0; i < 5; i++){
            batteryAnimator = ObjectAnimator.ofFloat(tvBattery, "alpha", 1).setDuration(600);
            batteryAnimator.setStartDelay(200);
            batteryAnimator.start();
            screenAnimator = ObjectAnimator.ofFloat(tvScreen, "alpha", 1).setDuration(600);
            screenAnimator.setStartDelay(1500);
            screenAnimator.start();
            sensorAnimator = ObjectAnimator.ofFloat(tvSensor, "alpha", 1).setDuration(600);
            sensorAnimator.setStartDelay(3000);
            sensorAnimator.start();
            wifiAnimator = ObjectAnimator.ofFloat(tvWifi, "alpha", 1).setDuration(600);
            wifiAnimator.setStartDelay(4500);
            wifiAnimator.start();


            batteryAnimator = ObjectAnimator.ofFloat(tvBattery, "alpha", 0).setDuration(600);
            batteryAnimator.setStartDelay(6000);
            batteryAnimator.start();
            screenAnimator = ObjectAnimator.ofFloat(tvScreen, "alpha", 0).setDuration(600);
            screenAnimator.setStartDelay(6000);
            screenAnimator.start();
            sensorAnimator = ObjectAnimator.ofFloat(tvSensor, "alpha", 0).setDuration(600);
            sensorAnimator.setStartDelay(6000);
            sensorAnimator.start();
            wifiAnimator = ObjectAnimator.ofFloat(tvWifi, "alpha", 0).setDuration(600);
            wifiAnimator.setStartDelay(6000);
            wifiAnimator.start();
    }

我尝试使用batteryAnimator.setRepeatedMode(ValueAnimator.RESTART) 和battery.Animator.setRepeatCount(ValueAnimator.INFINITE),我想我必须使用这样的东西,但文本像圣诞树一样闪烁..

如果有人可以帮助我..

【问题讨论】:

  • 您需要在循环之间添加延迟。

标签: android animation loading animator


【解决方案1】:

创建此方法。这将使您的视图(在您的情况下,您的TextView)淡入淡出:

    public void fadeInAndOut(final View view) {
        ObjectAnimator fadeOut = ObjectAnimator.ofFloat(view, "alpha", 0f);
        fadeOut.setDuration(500);
        fadeOut.setInterpolator(new DecelerateInterpolator());

        ObjectAnimator fadeIn = ObjectAnimator.ofFloat(view, "alpha", 1f);
        fadeIn.setDuration(500);
        fadeIn.setInterpolator(new DecelerateInterpolator());

        AnimatorSet set = new AnimatorSet();
        set.play(fadeIn).after(fadeOut);

        set.start();
    }

然后,你需要在一些间隔之间调用这个函数。例如,我使用的是CountDownTimer。它将以 1 秒的间隔被调用 20 次。

new CountDownTimer(20000, 1000) {

    public void onTick(long millisUntilFinished) {
      //This will be called every time timer ticks
      fadeInAndOut(/*your TextView goes here*/)
    }

    public void onFinish() {
       //Timer is done. 
    }

}.start();

【讨论】:

  • 感谢@Azizjon,它只工作一次,但不能循环使用。我为每个 TextView 创建了 4 个 timer.schedule 所以 4 个 Timer Task。每个 TimerTask 都有一个特定的延迟和一个特定的周期。但是如果我把代码放在一个循环中,它就不起作用,我怎样才能在我的循环中添加代码?我认为问题在于期限或延迟。我还有一个问题,我可以将每个 TimerTask 放在一个中以确定一个全局周期吗?
  • @zefz 我已经更新了我的答案。你能再检查一次吗?
  • 它工作,我明白为什么以前不是这样!我创建了一个带有延迟和周期参数的 TimerTask,这个 TimerTask 包含我需要的任何 TimerTask(在我的情况下是 4 个),用于执行文本动画、电视后电视,每个电视都有特定的延迟,我用 timer.cancel() 停止动画条件好的时候!非常感谢 ! (y)
  • @zefz 很高兴为您提供帮助。如果我的回答有帮助,请接受答案并点赞,这样它也可以帮助其他人。干杯!
  • 我是新的 Web 开发人员,也是 stackoverflow 的新手,我没有足够的声誉来支持投票,但我接受了答案,再次感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多