Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一个普通的Android SDK动画师可以每隔一段时间执行一个任务?_Java_Android_Android Studio - Fatal编程技术网

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);