簡體   English   中英

如何在啟動時僅對Android View設置一次動畫?

[英]How to animate an Android View only once on startup?

我目前正在為我的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())開始,但是問題仍然相同。

您可以簡單地添加一個初始值為true的布爾變量,並且在第一次使用后可以將其值更改為false,並且可以在onfocus內添加另一個條件

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

這會滿足您的需要,但是如果您希望動畫在應用程序生命周期中只有一次,則可以使用共享首選項或在應用程序類中簡單地添加靜態布爾變量

您可以使用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();
}

使用SharedPreference來存儲一個布爾變量,並在第一個動畫后立即將其設為true,並在每次動畫開始前進行檢查。

if(!isAnimatedAlready){
animate();
setIsAnimated(true);
}else{}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM