gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:57:34 25 4
gpt4 key购买 nike

我正在尝试创建一个初始屏幕,该屏幕应在加载下一个 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/

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