SplashScreenDrawable主要作用于冷启动中的规避白屏或者显示引导页用的,但是根据不同场景或者时不时变更一下页面的需求非常多,还需要固定个几秒才能消失,都需要通过代码动态设置不同的图片。
试了好几种思路:
1.动态修改theme里面的background达到变更图片的目的。
没啥用,在oncreate每次启动跟没写一样,可能是姿势不对。
2.通过getActivityInfo的方法改变bundle里面的meta-data值。
没啥用,下次获取还是原来的值,你修改的只是备份出来给你的数据。
3.通过创建别的Activity页面设置欢迎页再定时跳过去或者通过getwindow的addview再延时移除。
部分机型没问题,但是有些机型比方说小米10,会出现main方法不执行的问题从而导致很多页面不显示的问题,但是杀了app重新进入又恢复,更甚者会出现跳转后白一会才加载的诡异问题。
以上都是安卓端(ios端自有可以设置启动图+启动时间的方法)诸多尝试中出现的问题,有更好的解决方法请留言。
最终的解决方法↓:
public class MainActivity extends FlutterActivity {
private Handler handler = new Handler();
@Nullable
@Override
public SplashScreen provideSplashScreen() {
SharedPreferences sharedPreferences = getSharedPreferences("XChat", Context.MODE_PRIVATE);
boolean isFirstIn = sharedPreferences.getBoolean("first", true);
sharedPreferences.edit().putBoolean("first", false).commit();
int resId = isFirstIn ? R.mipmap.splash_first : R.mipmap.splash;
return new DrawableSplashScreen(ResourcesCompat.getDrawable(getResources(), resId, getTheme()));
}
}
通过重写provideSplashScreen的方法,因为是public,完全可以根据自己想要的覆盖掉父类的图片,直接修改返回的图,还能修改淡入淡出的事件。
至于需要停2秒再跳转,可以在DrawableSplashScreen的构造方法中修改渐变时间间接完成。