gpt4 book ai didi

java - TabLayout - 指示器动画延迟

转载 作者:行者123 更新时间:2023-12-02 10:19:19 25 4
gpt4 key购买 nike

在我的应用程序中,我有带有两个选项卡的 TabLayout:秒表和计时器。当我在这两个选项卡之间切换并且计时器没有运行时,一切都很好。当我启动计时器时出现问题,指示器动画被延迟。下面的视频演示了此问题:

https://media.giphy.com/media/xjLnjaQ0NgH0a4yqsO/giphy.gif

我认为这是由于 CountDownTimer 中的 countDownInterwal 过短造成的。我将其设置为 50。这个值很低,因为我想要平滑的时间指示器(在我的应用程序中蓝色大圆圈 - Timer )。

private void startTimer() {
countDownTimer = new CountDownTimer(timeLeftInMillis, 50) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateCountDownText();
mProgressBar1.setProgress((int) (timeLeftInMillis/10));
}

@Override
public void onFinish() {
finishCountDownTimer();
countDownSound.start();
showDialogWhenFinishCountDown();
}
}.start();
}

我该如何解决这个问题?

最佳答案

CountDownTimer 不是最佳解决方案(首先,整个类是同步的,这会导致立即开销),如果您愿意,您不应该手动设置动画流畅的动画。使用 Android 框架提供的功能。

我使用了 ObjectAnimator 和一个非常简单的示例:

Example Animation

基本 Fragment 类 - 您最感兴趣的是 startStopTimer() 方法:

public class TimerFragment extends Fragment {

public TimerFragment() { }

private static int ONE_MINUTE_MILLIS = (int) TimeUnit.MINUTES.toMillis(1);

private ProgressBar progressBar;
private ObjectAnimator animator;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_timer, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
progressBar = view.findViewById(R.id.progressBar);
progressBar.setMax(ONE_MINUTE_MILLIS);
progressBar.setProgress(ONE_MINUTE_MILLIS);
view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStopTimer();
}
});
}

private void startStopTimer() {
if(animator == null) {
animator = ObjectAnimator.ofInt(progressBar, "progress", ONE_MINUTE_MILLIS, 0);
animator.setDuration(ONE_MINUTE_MILLIS);
animator.setInterpolator(new LinearInterpolator());
animator.start();
} else {
animator.cancel();
animator = null;
progressBar.setProgress(ONE_MINUTE_MILLIS);
}
}

@Override
public void onDestroyView() {
super.onDestroyView();

if(animator != null) {
animator.cancel();
animator = null;
}
}
}

关于java - TabLayout - 指示器动画延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54449237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com