Android Runnable 中的动画

Android Animation in Runnable

动画新手。我的目标是每小时从屏幕顶部向底部滚动一条细黑条。我的黑条基于按下按钮滚动。我找到了一个 Runnable 示例,它可以重复 运行 一个动作。在我的代码中,正在调用我的 y 回调函数,但我的动画从未启动。

我的黑条是视图,不可见。

<View
        android:id="@+id/blackSlider"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/black"
        android:layout_alignParentTop="true"
        android:visibility="gone"/>

当按下按钮触发时,我的动画效果非常好

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="0%p"
        android:toYDelta="100%p"
        android:fillAfter="true"
        android:interpolator="@android:anim/linear_interpolator"
        android:duration="500" />
</set>

我的 运行nable 是在我的 main activity

中创建的
 occupancyButton = (Button)findViewById(R.id.occupancy_button);
        blackSlider = (View) findViewById(R.id.blackSlider);
        animation = AnimationUtils.loadAnimation(mContext, R.anim.screen_wipe_top_down);
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                blackSlider.setVisibility(View.VISIBLE);
                blackSlider.bringToFront();
                getActionBar().hide();
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                blackSlider.setVisibility(View.GONE);
                getActionBar().show();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

        OneShotRunner animationRunner = new OneShotRunner(5000, true);
        OneShotActionCallback animationRunnerCallback = new OneShotActionCallback() {
            @Override
            public void onActionRun() {
                blackSlider.startAnimation(animation);
            }
        };

        animationRunner.setOneShotRunActionCallback(animationRunnerCallback);
        animationRunner.start();

如果我在点击侦听器上使用 occupancyButon,动画就会正确触发。从 运行nable 开始时,永远不会调用动画开始和结束函数。动画不能 运行 来自 运行nable 吗?我是不是初始化不正确?

确保在 UI 线程中启动动画。否则它们可能无法工作。