android - Intent 加载时显示加载动画

标签 android animation android-activity runnable

我正在尝试创建一个初始屏幕,该屏幕应在加载下一个 Activity 时显示旋转图像。

因此我有两个 Activity 。问题是旋转不会开始,除非我在创建 Intent 之前添加 Thread.sleep

这是第一个 Activity ,动画应该在加载第二个 Activity 时运行。

import com.silencedut.taskscheduler.Task;
import com.silencedut.taskscheduler.TaskScheduler;

public class LaunchActivity extends AppCompatActivity {

    private Task<Intent> loader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_launcher);

        loader = new LoadingTask();
        TaskScheduler.execute(loader);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        TaskScheduler.cancelTask(loader);
    }

    private class LoadingTask extends Task<Intent>
    {
        LoadingTask() {
            ImageView imageLoader = findViewById(R.id.imageViewLoader);

            RotateAnimation rotate = new RotateAnimation(
                    0,360, Animation.RELATIVE_TO_SELF,
                    0.5f, Animation.RELATIVE_TO_SELF,0.5f);
            rotate.setRepeatCount(Animation.INFINITE);
            rotate.setRepeatMode(Animation.RESTART);
            rotate.setDuration(5000);
            rotate.setInterpolator(new LinearInterpolator());

            imageNeedle.startAnimation(rotate);
        }

        @Override
        public Intent doInBackground() {
            DemoApplication app = (DemoApplication) getApplicationContext();

            return new Intent(app, MainActivity.class);

            return null;
        }

        @Override
        public void onSuccess(Intent result) {
            if (result != null) {
                startActivity(result);
            }
            finish();
        }

        @Override
        public void onFail(Throwable throwable) {
            super.onFail(throwable);
        }

        @Override
        public void onCancel() {
            super.onCancel();
        }
    }
}

此类使用 TaskScheduler库,Task 类基于 Runnable

在第二个类中,我添加了一个 Thread.Sleep 以使加载持续更长时间。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try { Thread.sleep(5000); }
        catch (InterruptedException ex) { android.util.Log.d("Exception", ex.toString()); }

        ...
    }
    ...
}

我的问题是,在加载 MainActivity 的这 5 秒内,动画图像不显示或旋转。如果我在 doInBackground (LoadingTask) 中复制相同的 Thread.sleep block ,那么我可以看到动画:

    @Override
    public Intent doInBackground() {
        DemoApplication app = (DemoApplication) getApplicationContext();

        // this makes the animation run
        try { Thread.sleep(5000); }
        catch (InterruptedException ex) { android.util.Log.d("Exception", ex.toString()); }

        return new Intent(app, MainActivity.class);

        return null;
    }

那么,如何在 doInBackground 中使用不必要的 Thread.sleep 来运行动画?我知道如果第二个 Activity 加载很快,动画就不会显示,但即​​使让它花费更多时间它也不起作用。

最佳答案

你可以做这个广播接收器。 您不需要使用线程。

只需同时启动这两个 Activity 即可。

在 Splash Activity 中,注册广播接收者。当所有数据加载时,第二个 Activity 发送广播。然后完成你的飞溅 Activity 。

如果你不明白那么我可以给你举个例子。 让我知道。

关于android - Intent 加载时显示加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867286/

相关文章:

Javascript 和 CSS 动画没有将我的结果放在正确的位置

javascript - jQuery:创建一个循环,首先需要一个时间间隔,然后更改为另一个时间间隔

java - 如何从 onoptionsitemselected 访问所有菜单项

java - 如何从 Paint 对象获取 RGB 值

android - 文件从字符串中读取换行符,而字符串上没有换行符

android - 如何加快访问 Android 上的联系人?

java - AsyncTask 不是异步的吗?

javascript - 更改元素内的文本后如何重复动画?

android - Google 新登录,未调用 onActivityResult()

android - OnBackPressed 同一 Activity 的多个实例