问题描述
我目前正在为我的Android应用开发一个非常简单的UI。 我的目标是为启动和“永不再”上的一些按钮(我不知道有多少个)设置动画。
因此,按照官方文档,阅读Java文档并在stackoverflow上进行搜索,我终于使它工作了。 这是我对单个测试视图所做的操作。
- 在OnCreate()方法中设置视图和动画。
private TextView test_text;
private Animation test_anim;
...
protected void onCreate(Bundle savedInstanceState) {
...
test_text = (TextView) findViewById(R.id.text);
test_anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.test_animation);
}
- 在OnWindowFocusChanged()方法中启动Animation。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
test_text.startAnimation(test_anim);
}
此过程有效,活动开始时执行动画,唯一的问题是每次活动状态更改时都会调用onWindowFocusChanged()方法。 因此,当应用程序恢复运行,布局旋转以及诸如此类的东西时,文本会发出动画效果。
因此,重复:我的目标是在应用程序启动时仅对文本进行动画处理,然后永远停止。
如果有帮助,我已经尝试将Animation开始以其他方法(例如onStart()或onResume())开始,但是问题仍然相同。
1楼
您可以简单地添加一个初始值为true的布尔变量,并且在第一次使用后可以将其值更改为false,并且可以在onfocus内添加另一个条件
If(boolean){do the animation;
boolean=false;}
这会满足您的需要,但是如果您希望动画在应用程序生命周期中只有一次,则可以使用共享首选项或在应用程序类中简单地添加静态布尔变量
2楼
您可以使用SharePreferences来检查布尔值。 如果为true或不存在,则意味着首次启动,或者您可以在onWindowFOcusChange()方法中对应用程序进行动画处理。 将其设置为false不再重做。
////////////////////////////
/// CONSTANTS
////////////////////////////
private static final String PREF_NAME = "pref_name";
public static final String IS_STARTUP = "is_startup";
////////////////////////////
/// FIELDS
////////////////////////////
private SharedPreferences settings;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
settings = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
if (settings.getBoolean(IS_START_UP, true)) {
test_text.startAnimation(test_anim);
settings.edit().putBoolean(IS_START_UP, false).commit();
}
}
如果您想在下次启动应用程序时再次设置动画,可以在退出应用程序时将首选项IS_START_UP设置为true。
if (!settings.getBoolean(IS_START_UP, false)) {
settings.edit().putBoolean(IS_START_UP, true).commit();
}
3楼
使用SharedPreference来存储一个布尔变量,并在第一个动画后立即将其设为true,并在每次动画开始前进行检查。
if(!isAnimatedAlready){
animate();
setIsAnimated(true);
}else{}