質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1095閲覧

一度アプリをバックグラウンドにすると、SharedElementが機能しなくなる

CAIOS

総合スコア24

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/06/15 10:34

編集2020/06/21 14:17

SharedElementを使用して、Fragmnet・Activity間の画面遷移をアニメーション化しています。

以下のコードで一応動くのですが、一つ問題があります。遷移先のActivityで一度アプリをバックグラウンドにしてしまうと、SharedElementを使用して前の画面に戻れなくなってしまいます。以下にGIFを貼り付けます。(以下GIFの説明)最初に、SharedElementを使用してActivityに遷移し、そのままBackします。この時点では、SharedElementを使用して前の画面に戻れています。次に、SharedElementを使用してActivityに遷移した後、一度アプリをバックグラウンドへ移行させます。再度表示してBackすると、SharedElementを使用せずに前の画面に戻ってしまいます。

なぜバックがラウンドにするとSharedElementができなくなるのかさっぱりわからず、手詰まりです。どなたか原因をご存じの方がいらっしゃいましたら、ご教授お願いいたします。

GIF

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を貼っておきます。

テストアプリ

テストアプリ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SearchActivity側の実装に問題がありそうです。
onBackPressedでアニメーションを実行するのではなく、ドキュメントにあるようにActivityNavigator.applyPopAnimationsToPendingTransition()を使ってみてください。

kotlin

1override fun finish() { 2 super.finish() 3 ActivityNavigator.applyPopAnimationsToPendingTransition(this) 4}

追記

androidx.transition:transitionライブラリ内のバグのようです。
https://issuetracker.google.com/issues/158553240
https://stackoverflow.com/questions/57694692/transition-shared-element-breaks-when-for-activity-called-onstop

投稿2020/06/20 04:18

編集2020/06/22 15:00
kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CAIOS

2020/06/20 08:15

回答ありがとうございます。ご指摘の通り試してみましたが、治りませんでした。今回の例ではNavigationに何かAnimationをしているわけではなく、SharedElementだけですのでうまく行かなかったのだと思われます。 その後いろいろと試してわかったことを補足に書きました。
kakajika

2020/06/20 13:14

Shared Elementは実際にViewを共有しているわけではなく、それっぽくアニメーションをしてViewが共有されているように見せる機能ですので、Navigationのアニメーションに関する設定は有効かと思います。(今回は別の原因があるみたいですが…) 補足を拝見したところ、OSのバージョンによって挙動が異なるのですね。 navigationライブラリやandroidx.transitionのバージョンはいくつのものを使用していますか?
CAIOS

2020/06/20 15:10 編集

以下のとおり、どちらもバージョン1.0.0を使用しています。androidx.transition...のライブラリは使用していません。補足にdependencies全体を載せておきます。よろしくお願いいたします。 implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0" implementation "android.arch.navigation:navigation-ui-ktx:1.0.0"
kakajika

2020/06/20 16:08 編集

android.arch.navigationということは、AndroidXが導入される前の少し古いバージョンですね。 AndroidX以降のバグ修正は旧ライブラリには反映されないので、可能であればAndroidXの最新のNavigationライブラリを使って試してみてもらえますか? https://developer.android.com/jetpack/androidx/releases/navigation
CAIOS

2020/06/21 04:52 編集

ありがとうございます。AndroidXにマイグレーションし、以下のライブラリを導入してみましたが、未だにうまくいきません。この他に、RC版の2.3.0-rc01やアルファ版の2.3.0-alpha06も試してみましたがうまくいきませんでした。本当に手詰まりで困っています...。 implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2' implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
kakajika

2020/06/21 07:49

うーん、そうなると、今載せていただいていない箇所のコードに問題がある可能性が高そうですね。。そこまで推測して回答するのはちょっと厳しいので、問題が再現できる最小限のコードを載せていただければ回答できるかもしれません。
CAIOS

2020/06/21 14:14

長々とお付き合いいただきありがとうございます。githubにテストプロジェクトを上げました。追記にこのテストアプリの動作を示すGIFを上げました。よろしくお願いいたします。
kakajika

2020/06/22 13:53

プロジェクトコードを拝見しました。これだけのシンプルなコードで再現できるのであればライブラリのバグの可能性が高そうと思い調べてみたところ、androidx.transitionのIssue TrackerにてすでにIssueが報告されていました。(Navigation側のバグかなと予想していたので、最初にこの情報を出せなくてすみません。。) https://issuetracker.google.com/issues/158553240 StackOverflowにも同様の質問がありましたので載せておきます。 https://stackoverflow.com/questions/57694692/transition-shared-element-breaks-when-for-activity-called-onstop ライブラリ側のバグなので、バグが修正されるのを待つか、何らかの方法で対策するしかなさそうです。どうしてもActivityへ遷移する必要がないのであれば、Fragment間の遷移で実装するのが確実かと思います。
CAIOS

2020/06/22 14:42

ありがとうございます。StackOverFlowでの質問日が9ヶ月前と...。修正される気配がありませんね...。一応バグの報告をしておこうと思います。長くお付き合いいただきありがとうございました。
kakajika

2020/06/22 14:57

時間が取れるならバグの原因を追いかけてみたいところです。。お力になれずすみません。回答は修正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問