SharedElementを使用して、Fragmnet・Activity間の画面遷移をアニメーション化しています。
以下のコードで一応動くのですが、一つ問題があります。遷移先のActivityで一度アプリをバックグラウンドにしてしまうと、SharedElementを使用して前の画面に戻れなくなってしまいます。以下にGIFを貼り付けます。(以下GIFの説明)最初に、SharedElementを使用してActivityに遷移し、そのままBackします。この時点では、SharedElementを使用して前の画面に戻れています。次に、SharedElementを使用してActivityに遷移した後、一度アプリをバックグラウンドへ移行させます。再度表示してBackすると、SharedElementを使用せずに前の画面に戻ってしまいます。
なぜバックがラウンドにするとSharedElementができなくなるのかさっぱりわからず、手詰まりです。どなたか原因をご存じの方がいらっしゃいましたら、ご教授お願いいたします。
HomeFragment.kt(遷移元Fragment)
HomeFragment.kt
1private fun startSearchActivity(){ 2 val options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity as AppCompatActivity, 3 Pair<View, String>(FH_CardView, "SearchView"), 4 Pair<View, String>(FH_NavigationIcon, "NavigationIcon") 5 ) 6 7 val extras = ActivityNavigator.Extras.Builder() 8 .setActivityOptions(options) 9 .build() 10 11 findNavController().navigate(R.id.action_home_to_search, null, null, extras) 12 }
SearchActivity.kt(遷移先Activity)
SearchActivity.kt
1 override fun onBackPressed() { 2 3 AS_NavigationIcon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.arrow_to_hamburger)) 4 val animatedIcon = AS_NavigationIcon.drawable as AnimatedVectorDrawable 5 animatedIcon.start() 6 7 super.onBackPressed() 8 } 9
main_to_search.xml(Navigation)
main_to_search.xml
1<?xml version="1.0" encoding="utf-8"?> 2<navigation xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/main_to_search" 6 app:startDestination="@id/homeFragment"> 7 8 <fragment 9 android:id="@+id/homeFragment" 10 android:name="caios.android.search_fleamarket.fragment.HomeFragment" 11 android:label="HomeFragment" > 12 <action 13 android:id="@+id/action_home_to_search" 14 app:destination="@id/searchActivity"/> 15 </fragment> 16 17 <activity 18 android:id="@+id/searchActivity" 19 android:name="caios.android.search_fleamarket.activity.SearchActivity" 20 android:label="activity_search" 21 tools:layout="@layout/activity_search" /> 22</navigation>
###追記
アプリがバックグラウンドに移行するタイミングでいかのようなLogCatが出ていました。他のActivityでは出ていないので何らかの関係があるものと思われますが、まだよくわかっていません。
D/ViewRootImpl[SearchActivity]: changeCanvasOpacity: opaque=true D/ViewRootImpl[SearchActivity]: changeCanvasOpacity: opaque=false
また、Fragment to Fragmentの遷移では通常に動作することを確認しました。
また、仮想端末でテストしたところ、Android P以上で今回の症状が発生することがわかりました。O以下では普通に動作しています
###追記2
以下にgradleの依存関係を載せます。Navigationライブラリはktxのバージョン1.0.0を使用しています。
dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3" implementation 'androidx.core:core-ktx:1.3.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0" implementation "android.arch.navigation:navigation-ui-ktx:1.0.0" implementation 'com.google.android.material:material:1.1.0' implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.preference:preference-ktx:1.1.1' implementation 'com.github.kittinunf.fuel:fuel:1.12.0' implementation 'com.github.kittinunf.fuel:fuel-android:1.12.0' implementation 'io.coil-kt:coil:0.9.5' implementation 'com.r0adkll:slidableactivity:2.1.0' implementation 'com.beust:klaxon:5.0.1' implementation 'org.jsoup:jsoup:1.11.2' testImplementation 'junit:junit:4.13' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }
###追記3
今回の問題を簡単に説明するためにテストアプリを作成しました。このアプリも同様に、一度アプリをバックグラウンドへ移行させるとSharedElementが効かなくなってしまいます。AndroidO以下ではこの問題は発生しません。AndroidP, Q, Rで発生しています。以下にテストアプリの動作を示すGIFを貼っておきます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/20 08:15
2020/06/20 13:14
2020/06/20 15:10 編集
2020/06/20 16:08 編集
2020/06/21 04:52 編集
2020/06/21 07:49
2020/06/21 14:14
2020/06/22 13:53
2020/06/22 14:42
2020/06/22 14:57