Lollipopの共有要素の移行で奇妙なことがわかります。共有要素がアニメーションを開始する直前にちらつきます(ビデオをご覧ください https://www.youtube.com/watch?v=DCoyyC_S-9A )
それがなぜ起こっているのか私にはわかりません。ただし、テーマに<item name="Android:windowSharedElementsUseOverlay">false</item>
を追加すると、ちらつきは見られませんが、トランジションは見栄えがよくありません(アニメーションの半分だけが「非表示」にアニメーション化されているように見えます)。
その他の移行設定:
<item name="Android:windowActivityTransitions">true</item>
<item name="Android:windowContentTransitions">true</item>
<item name="Android:windowAllowEnterTransitionOverlap">true</item>
<item name="Android:windowAllowReturnTransitionOverlap">true</item>
<item name="Android:windowSharedElementEnterTransition">@Android:transition/move</item>
<item name="Android:windowSharedElementExitTransition">@Android:transition/move</item>
ActivityCompatとActivityOptionsCompatを使用してアクティビティを開始しています:
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(ActivityMain.this,
new Pair<View, String>(playButton, getString(R.string.translation_control_button)),
new Pair<View, String>(findViewById(R.id.playerImage), getString(R.string.translation_artwork)));
ActivityCompat.startActivity(this, pendingIntent, options.toBundle());
最初のアクティビティ:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:id="@+id/main_container">
<include layout="@layout/toolbar"/>
<FrameLayout
Android:id="@+id/activity_main_fragment_container"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1"></FrameLayout>
<TableLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="45dp"
Android:padding="7dp"
Android:stretchColumns="*"
Android:id="@+id/player_toolboxTable"
Android:background="?colorPrimary">
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@+id/player_toolbox">
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:id="@+id/player_fav"
Android:src="@drawable/rating_not_important"
Android:onClick="playerFav"
Android:background="@drawable/button_selector_semi_white"
/>
<ImageView
Android:src="@drawable/av_pause_over_video"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:id="@+id/player_play"
Android:onClick="playerPlay"
Android:background="@drawable/button_selector_semi_white"
Android:transitionName="@string/translation_control_button"
/>
<ImageView
Android:src="@drawable/social_share"
Android:layout_width="wrap_content"
Android:clickable="true"
Android:id="@+id/player_share"
Android:background="@drawable/button_selector_semi_white"
Android:layout_height="wrap_content"
Android:onClick="playerShare"
/>
<ImageView
Android:src="@drawable/content_save"
Android:layout_width="wrap_content"
Android:clickable="true"
Android:id="@+id/player_record"
Android:background="@drawable/button_selector_semi_white"
Android:layout_height="wrap_content"
Android:onClick="playerRecord"
/>
</TableRow>
</TableLayout>
</LinearLayout>
</com.heinrichreimersoftware.materialdrawer.DrawerFrameLayout>
2番目のアクティビティ:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".activities.CommunityActivity">
<include layout="@layout/toolbar"/>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:orientation="vertical">
<Button
Android:id="@+id/community_google_plus_group"
Android:text="@string/community_google_plus"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/ic_action_gplus"
Android:gravity="left|center_vertical"
style="@style/MaterialButton"
/>
<Button
Android:id="@+id/community_google_fb"
Android:text="@string/community_facebook"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/ic_action_facebook"
Android:gravity="left|center_vertical"
style="@style/MaterialButton"
/>
<Button
Android:id="@+id/community_mail"
Android:text="@string/community_mail"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/ic_action_gmail"
Android:gravity="left|center_vertical"
style="@style/MaterialButton"
/>
</LinearLayout>
<include layout="@layout/include_mini_player"/>
</LinearLayout>
include_mini_player.xml
<fragment
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/mini_player_fragment"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:name=".fragments.MiniPlayerFragment"
Android:layout_width="fill_parent"
Android:layout_height="72dp"
tools:layout="@layout/fragment_mini_player"/>
fragment_mini_player:
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal"
Android:background="?colorPrimary"
>
<ImageView
Android:id="@+id/player_artwork"
Android:layout_width="52dp"
Android:scaleType="centerCrop"
Android:layout_height="52dp"
Android:src="@drawable/music_icon"
Android:layout_margin="5dp"
Android:layout_gravity="center_vertical"
Android:transitionName="@string/translation_artwork"
/>
<LinearLayout
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:orientation="vertical"
Android:layout_marginLeft="5dp"
Android:layout_gravity="center_vertical">
<TextView
Android:textColor="@Android:color/white"
Android:text=" "
Android:textSize="8pt"
Android:id="@+id/player_song_title"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
/>
<TextView
Android:textColor="@Android:color/white"
Android:text=" "
Android:textSize="7pt"
Android:id="@+id/player_song_artist"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
/>
</LinearLayout>
<ImageView
Android:id="@+id/player_play_button"
Android:layout_gravity="center_vertical"
Android:layout_width="42dp"
Android:layout_height="42dp"
Android:layout_marginRight="5dp"
Android:src="@drawable/av_pause_over_video"
Android:background="@drawable/button_selector_semi_white"
Android:transitionName="@string/translation_control_button"
/>
</LinearLayout>
なぜそれが起こっているのか、何か考えはありますか?
ばんざーい!私はこの問題をなんとか解決しました。
画面の点滅は、ここで説明されている一般的な問題です: アクティビティ間の画像遷移時の画面の点滅 (thx @AlexLockwood)
共有要素の点滅は、DrawerLayoutが原因でした。もうすぐ新しいアクティビティを始めました。引っ越した時ActivityCompat.startActivity
からDrawerLayout.DrawerListener
のonDrawerClosed
メソッドは、すべてが魅力のように機能し始めました。