gpt4 book ai didi

android - recreate() 可以给一个过渡动画吗?

转载 作者:太空狗 更新时间:2023-10-29 14:35:25 28 4
gpt4 key购买 nike

我正在创建一个简单的考试结果存储程序。该 Activity 根据用户的当前结果更改主题 - 例如血红色表示不及格等。当用户删除主题并导致整体结果发生重大变化时,主题会发生变化。主题由这个方法决定:

    private int getTheme()
{

String[] themes={"GreenTheme","TurquoiseTheme","OrangeTheme","RedTheme","BlackTheme"};
int index=0;
float gpa =getSemesterGpa(currentSemester);

if (gpa >= 3.5)
index = 0;
else if (gpa >= 3)
index = 1;
else if (gpa >= 2.5)
index = 2;
else if (gpa >= 2)
index=3;
else
index=4;


return getResources().getIdentifier(themes[index],"style",getPackageName());
}

我的 onCreate() 中有:

protected void onCreate(Bundle savedInstanceState)

{
setTheme(getSgpaTheme());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_semester_detail);
...
}

每当主题删除导致 GPA 发生重大变化时,我都会使用 recreate() 以便使用新主题重新加载 Activity 。据我了解,没有其他方法可以动态应用新主题。不幸的是,recreate() 往往会产生刺耳的屏幕闪烁。在一台设备上,三星 S9+,屏幕甚至会变黑一会儿。但是在我的S7和华为设备上只有闪烁,仍然很烦人。

所以问题是:有没有一种方法可以实现这一点,有或没有 recreate(),这将允许我在颜色变化时添加一个漂亮的淡入过渡。

P.S:这是我的第一个问题,如果我提供的信息太少,请原谅。我不确定什么是相关的。另外,我只用 Java 和 Android-Studio 编程了大约 3 周,所以我要求一个面向菜鸟的答案。谢谢。

最佳答案

根据需要修改以下代码

 @Override
public Resources.Theme getTheme() {

Resources.Theme theme=super.getTheme();

preferencesTheme=getSharedPreferences("themes", Context.MODE_PRIVATE);
String themeName=preferencesTheme.getString("theme","orange");

if("orange".equals(themeName)){
theme.applyStyle(R.style.OrangeTheme,true);
}else if("red".equals(themeName)) {
theme.applyStyle(R.style.RedTheme,true);
}

return theme;
}

比按钮点击

@Override
public void onClick(View v) {

SharedPreferences.Editor mEditorTheme=preferencesTheme.edit();

if(v.getId()==R.id.rdoOrange ){

mEditorTheme.putString("theme","orange");
mEditorTheme.apply();
recreate();

}else if(v.getId()==R.id.rdoRed){

mEditorTheme.putString("theme","red");
mEditorTheme.apply();
recreate();
}
}

在 style.xml 中

 <style name="OrangeTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#FF5722</item>
<item name="colorPrimaryDark">#B13C17</item>
<item name="colorAccent">#8BC34A</item>
</style>

<style name="RedTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#F44336</item>
<item name="colorPrimaryDark">#A00B0B</item>
<item name="colorAccent">#FF9800</item>
</style>

希望对您有所帮助。

关于android - recreate() 可以给一个过渡动画吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57071210/

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