2015-08-08 3 views
1

В настоящее время я работаю над очень простым интерфейсом для моего 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(), но проблема остается прежней.

ответ

1

Просто можно добавить логическую переменную с начальным значением истинны и после того, как первый раз вы можете изменить его значение ложь и внутри OnFocus вы можете добавить еще одно условие

If(boolean){do the animation; 
boolean=false;} 

это сделать хотите вы хотите, но если вы хотите, чтобы анимация была однажды в течение жизненного цикла приложения, вы можете использовать общие префизы или просто добавить статическую логическую переменную в класс приложения

0

Вы можете использовать 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 истину при выходе из приложения.

if (!settings.getBoolean(IS_START_UP, false)) { 
    settings.edit().putBoolean(IS_START_UP, true).commit(); 
} 
+0

Хорошо, получилось. Общие префы работают в любой ситуации, кроме случаев, когда я поворачиваю экран. В этом случае анимация снова повторяется. Это похоже на то, что каждый раз, когда вы поворачиваете экран, активность перезапускается с самого начала. Любая идея, как это решить? Возможно, это то, что я не знаю о вращении экрана. – Claff

0

Использование SharedPreference для хранения булева переменная & сделать его истинным сразу после первой проверки анимации & это каждый раз перед началом анимации.

if(!isAnimatedAlready){ 
animate(); 
setIsAnimated(true); 
}else{} 
Смежные вопросы