如何在启动时仅启动一次Android视图动画?
问题描述:
我目前正在为我的Android应用程序开发一个非常简单的用户界面。我的目标是在启动时动画一些(我不知道有多少)按钮,永远不会。如何在启动时仅启动一次Android视图动画?
因此,遵循官方文档,阅读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()方法中的动画。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
test_text.startAnimation(test_anim);
}
此过程工作,活动开始时执行的动画,唯一的问题是,onWindowFocusChanged()方法,每次叫活性改变状态。因此,文本在应用程序恢复时进行动画处理,当布局旋转时就会像这样。
所以,重复一遍:我的目标是仅在应用启动时动画文本,然后永久停止。
如果有帮助,我已经尝试将其他方法(如onStart()或onResume())中的动画开始,但问题仍然相同。
答
只要你可以添加与初始值的布尔变量真,第一次后,你可以将其值修改为false,里面的onfocus你可以添加另一个条件
If(boolean){do the animation;
boolean=false;}
这将千方百计想让你想要的,但如果你要在应用程序生命周期中动画一次,您可以使用共享首选项或者只是在应用程序类中添加静态布尔变量
答
您可以使用SharePreferences来检查布尔值。如果是或不存在,则意味着首次启动,或者您可以在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();
}
}
如果你希望在应用程序启动下一次再aniamte
,你可以把选项IS_START_UP时退出应用程序设置为true。
if (!settings.getBoolean(IS_START_UP, false)) {
settings.edit().putBoolean(IS_START_UP, true).commit();
}
答
使用SharedPreference存储布尔变量&动画开始在此之前每次都使它立即真的第一个动画&检查后。
if(!isAnimatedAlready){
animate();
setIsAnimated(true);
}else{}
好的,明白了。除了当我旋转屏幕时,共享的首选项在任何情况下都能正常工作。在那种情况下,动画再次重复。就像每次旋转屏幕一样,活动从一开始就重新开始。任何想法如何解决这个问题?也许这是我不了解屏幕旋转的东西。 – Claff