2015-08-08 224 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

只要你可以添加與初始值的布爾變量真,第一次後,你可以將其值修改爲false,裏面的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時退出應用程序設置爲true。

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{}