我試圖在我的啓動畫面活動完成時和/或當我的主要活動開始時添加淡入淡出效果(理想情況下,主要活動會在啓動畫面結束後淡入,但我正在嘗試任何操作)。我嘗試過很多涉及動畫和過渡的東西,但是迄今爲止它們都沒有奏效。正如你所看到的,我對動畫並不熟悉,而且我知道我的問題可能來自我對它的缺乏瞭解。我一直在閱讀很多東西,但仍然感到迷失。Android上兩個活動之間的淡入淡出效果
我想知道,如果我的SplashActivity沒有佈局設置爲內容視圖的事實影響我的結果。我只使用啓動畫面活動的主題。下面是它在清單執行:
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
和主題(最初沒有最後2項):
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/launch_logo</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
我也試圖「在主題褪色」添加到我的MainActivity:
<style name="AppTheme.FadeIn" parent="AppTheme" >
<item name="android:windowNoTitle">true</item>
<item name="android:activityOpenEnterAnimation">@anim/fade_in</item>
</style>
關於動畫,我看到人們有時使用:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="1000" />
</set>
,而使用其他時間:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="1000" />
所以,我想這兩個...(可選的問題:什麼是它們之間的區別)
在SplashActivity,我想:
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
和
Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getBaseContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
也試過這在MainActivity的onCreate功能:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ViewGroup mRootView = (ViewGroup) findViewById(R.id.main_layout);
Fade mFade = new Fade(IN);
// Start recording changes to the view hierarchy
TransitionManager.beginDelayedTransition(mRootView, mFade);
和
ViewGroup mRootView = (ViewGroup) findViewById(R.id.main_layout);
mRootView.animate().alpha(0.0f); // at this point the view is totally transparent
mRootView.animate().alpha(1.0f).setDuration(2000); // here the view becomes 100% visible instantly, there is no animation
這主要活動的佈局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:weightSum="16"
android:background="@color/background"
android:animateLayoutChanges="true"
tools:context=".MainActivity">
...
我檢查了過渡動畫縮放在我的設置是否正確(我使用的是Android工作室的模擬器爲我的測試)。我的兩項活動之間從來沒有淡化效果。請有人賜教。
。
。
出於某種原因,我有某種淡入淡出效果,當我這樣做:
Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getBaseContext(),
android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
我真的不明白。當然它會變黑,然後主要活動的淡入效果正在起作用,但我不明白它爲什麼以這種方式工作。如果我刪除了一行,它就會停止工作(當我忘記評論第二個startActivity命令時,我發現它正在以這種方式工作)。當我說我試圖刪除一條線時,我也改變了這樣的順序:
Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getBaseContext(),
android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent, bundle);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out); // with or without this line, this code doesn't work.
// I must have tried pretty much all combinations without any success...
。
。
。
。
。
我只是張貼在這裏我所使用的所有以前的解決方案(我已經試過各自獨立)失敗後進行。當我想在打開下一個活動時獲得淡入效果時,我附加了一個布爾額外的意圖。然後在開放活動的onCreate方法,我有:
boolean fadeEffect = getIntent().getBooleanExtra("fade_in", false);
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.login_main_layout);
if(fadeEffect) {
mainLayout.setAlpha(0.f);
mainLayout.animate()
.alpha(1.f)
.setDuration(1000)
.start();
}
如果有人需要幫助實現這種解決方案,我可以提供幫助。
嘗試使用默認的淡入淡出的動畫,而不是創建自己的堅持。閱讀:https://developer.android.com/training/transitions/transitions.html –
謝謝,我試圖使用Android默認的動畫太多,但還是沒有結果... – Lilamuse
你與Android默認動畫試過什麼?他們應該使用Fade類正常工作! –