Java 是否有一个普通的Android SDK动画师可以每隔一段时间执行一个任务?
我试图为一项简单的任务找到最简单的解决方案:在视图上闪烁项目(每秒钟隐藏/显示一次)。但我找到的解决方案似乎有点过于复杂 我不能使用计时器/计时器任务对,因为这会导致尝试从不同线程访问视图时出现异常 我找到的唯一解决方案是:Java 是否有一个普通的Android SDK动画师可以每隔一段时间执行一个任务?,java,android,android-studio,Java,Android,Android Studio,我试图为一项简单的任务找到最简单的解决方案:在视图上闪烁项目(每秒钟隐藏/显示一次)。但我找到的解决方案似乎有点过于复杂 我不能使用计时器/计时器任务对,因为这会导致尝试从不同线程访问视图时出现异常 我找到的唯一解决方案是: package com.my.package; import android.animation.ValueAnimator; import android.view.View; ... other imports ... public class MyView ext
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
- 必须覆盖很多方法:开始/取消/结束,但只使用
重复
有更简单的解决方案吗?只需使用
处理程序发布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);