gpt4 book ai didi

java - 是否有一个普通的 Android SDK 动画器可以间隔执行任务?

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

我正在尝试为一个简单的任务找到最简单的解决方案:在 View 上闪烁项目(每秒隐藏/显示)。但我找到的解决方案似乎有点过于复杂。

我无法使用 Timer/TimerTask 对,因为这会导致尝试从不同线程访问 View 时出现异常。

我找到的唯一解决方案是:

package com.my.package;

import android.animation.ValueAnimator;
import android.view.View;
... other imports ...

public class MyView extends View {
private ValueAnimator myAnimator = ValueAnimator.ofInt(0, 2);
private boolean itemVisible;

... all constructors are calling the init() method ...

init() {
myAnimator.setDuration(1000);
myAnimator.addListener(new MyAnimatorListener(this));
myAnimator.setRepeatCount(ValueAnimator.INFINITE);
myAnimator.start();
}

private class MyAnimatorListener implements ValueAnimator.AnimatorListener {
private MyView myView;

MyAnimatorListener(MyView myView) {
this.myView = myView;
}

@Override
public void onAnimationStart(Animator animator) { }

@Override
public void onAnimationCancel(Animator animator) { }

@Override
public void onAnimationRepeat(Animator animator) {
myView.toggleItemVisibility();
}

@Override
public void onAnimationEnd(Animator animator) { }
}

public void toggleItemVisibility() {
itemVisible = !itemVisible;

invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
...

if (itemVisible) {
... draw item ...
}

...
}
}

这样做的问题是:

  • 我必须定义一个更改间隔 ValueAnimator.ofInt(0, 2) 即使这不会用于任何用途。我只是点击repeat 事件。 (我无法使用 update 事件,因为即使值没有更改,也会为每一帧调用该事件。)
  • 必须重写很多方法:开始/取消/结束,但只使用repeat

有没有更简单的解决方案?

最佳答案

只需使用Handler 来发布Runnable,然后使用postDelayed 递归地发布自身。以下内容应该有效,

final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
myView.toggleItemVisibility();
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(runnable, 1000);

关于java - 是否有一个普通的 Android SDK 动画器可以间隔执行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190852/

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