[英]How to animate an Android View only once on startup?
我目前正在為我的Android應用開發一個非常簡單的UI。 我的目標是為啟動和“永不再”上的一些按鈕(我不知道有多少個)設置動畫。
因此,按照官方文檔,閱讀Java文檔並在stackoverflow上進行搜索,我終於使它工作了。 這是我對單個測試視圖所做的操作。
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);
}
@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.