ナビゲーションドロワーを一度だけ構成して、複数のアクティビティに表示する方法はありますか?
このためには、ドロワーを実装するBaseActivityクラスを作成し、他のすべてのアクティビティにこれを拡張させます。
アクティビティのあるコード例が必要な人は、ここで私の答えを見てください: https://stackoverflow.com/a/19451842/27677
ニーストランジションが必要な場合は、次のことをお勧めします。NavigationDrawer
のアイテムをクリックすると、ナビゲーションドロワーが閉じ、同時に250でpostdelayedが使用されます(NavigationDrawer
を閉じるのにかかる時間)。また、メインコンテンツのアルファを150ミリ秒で同時に0にアニメーション化します。次に、アクティビティが開始すると、メインコンテンツのアルファを250ミリ秒で1にアニメーション化します。これは大きな移行をもたらします。 Google IO code: https://github.com/google/iosched/blob/master/Android/src/main/Java/com/google/ samples/apps/iosched/ui/BaseActivity.Java
ちなみに、@ Harish Godaraのリンクも確認する必要があります。 http://www.michenux.net/Android-navigation-drawer-748.html フラグメントで機能しますが、 NavigationDrawer
を実装する素晴らしい方法。
編集
いくつかのリンクが死んでいるので、アニメーションを取得するために私の最後のプロジェクトで使用したものです。 Kotlinにありますが、ポイントを明確にする必要があります。これは、BaseDrawerActivityのすべてのコードです。
private val NAVDRAWER_LAUNCH_DELAY = 250L
private val MAIN_CONTENT_FADEOUT_DURATION = 150L
private val MAIN_CONTENT_FADEIN_DURATION = 250L
-
private var shouldAnimate:Boolean
set(value) { intent.putExtra("animateTransition", value) }
get() = intent.getBooleanExtra("animateTransition", false)
-
private fun changeDrawerItem(newClass: Class<*>) {
runDelayed(NAVDRAWER_LAUNCH_DELAY, {
startActivity(Intent(this, newClass).apply {
addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
putExtra("animateTransition", true)
putExtra("selectedNav", selectedNavigationItem.name)
})
overridePendingTransition(0, 0)
})
mainContent.animate()?.alpha(0f)?.duration = MAIN_CONTENT_FADEOUT_DURATION
}
-
override fun onStart() {
super.onStart()
if(shouldAnimate) {
mainContent.alpha = 0f
mainContent.animate()?.alpha(1f)?.duration = MAIN_CONTENT_FADEIN_DURATION
} else {
mainContent.alpha = 1f
}
val selectedNav = intent.getStringExtra("selectedNav")
if(selectedNav != null) {
selectedNavigationItem = DrawerItem.valueOf(selectedNav)
}
}
-
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
if(shouldAnimate) {
overridePendingTransition(0, 0)
}
}
-
override fun onResume() {
super.onResume()
intent.removeExtra("animateTransition")
}