활동 전환이 공유 요소 전환을 방해하는 것을 완전히 방지하십시오.
종료 활동에서 getWindow (). setExitTransition (null);
입력 활동에서 getWindow (). setEnterTransition (null);
에서 https://stackoverflow.com/a/34907685/967131
부작용이 있을지 모르지만 확실하지 않습니다. 그것은 간단하지만 죽었습니다.
특정 요소가 깜박이는 것을 방지하십시오.
나는 Alex Lockwood의 답변으로 시작하여 작동시키기 위해 약간의 실험을했습니다. 수신 활동에 대해 제안하는 코드가 필요하지 않지만 핵심은 정확하지만 조각 대신 (활동 대신) 조각을 호출하고 도구 모음을 작업 표시 줄로 설정하여 문제가 발생했습니다.
오, 조각 이요? 상태 표시 줄과 탐색 표시 줄에 대한 참조를 검색하려고 시도하는 것이 null이라는 많은 의견을 보았습니다. 조각의 레이아웃에서 그것들을 찾을 수 없다는 것을 깨달을 때까지 나에게도 같은 일이 일어났습니다. 따라서 아래 코드는 활동에서 장식보기를 가져 와서 검색합니다. 그런 다음 아무런 문제없이 발견했습니다.
결국, 나는이 유틸리티 방법을 개발했습니다 :
public static Bundle transitionOptions(Activity activity, int transitionViewResId, int transitionNameResId) {
if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
return null;
}
View decorView = activity.getWindow().getDecorView();
View statusBar = decorView.findViewById(android.R.id.statusBarBackground);
View navigationBar = decorView.findViewById(android.R.id.navigationBarBackground);
View appBarLayout = decorView.findViewById(**R.id.appbarlayout**);
View transitionView = decorView.findViewById(transitionViewResId);
String transitionName = activity.getString(transitionNameResId);
List<Pair<View, String>> pairs = new ArrayList<>();
pairs.add(Pair.create(statusBar, Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME));
pairs.add(Pair.create(navigationBar, Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME));
if (appBarLayout != null) {
pairs.add(Pair.create(appBarLayout, activity.getString(**R.string.transition_appbarlayout**)));
}
pairs.add(Pair.create(transitionView, transitionName));
//noinspection unchecked - we're not worried about the "unchecked" conversion of List<Pair> to Pair[] here
return ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs.toArray(new Pair[pairs.size()]))
.toBundle();
}
R.string.transition_appbarlayout 및 R.id.appbarlayout을 참고하십시오 . 이 ID는 코드가 사용하는 것과 일치하는 한 임의적입니다. 내 XML에서 사용자 정의 작업 표시 줄을 다음과 같이 레이아웃합니다 (필수 사항까지 편집).
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:id="**@+id/appbarlayout**"
android:transitionName="**@string/transition_appbarlayout**">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"/>
</android.support.design.widget.AppBarLayout>
이와 같은 툴바를 사용하지 않으면 유틸리티 부분에서 해당 부분을 제거 할 수 있습니다.
그런 다음 조각에서 다음과 같이 호출합니다.
startActivity(intent, UIUtils.transitionOptions(getActivity(),
R.id.**my_view**,
R.string.**transition_my_view**));
XML과 일치하는 한 원하는 값을 사용하십시오.
그러면 전환 중에 상태 표시 줄, 도구 모음 및 탐색 모음 (뒤로 / 홈 / 최근 앱 버튼)이 깜박이지 않습니다. 나머지 활동 전환은 정상입니다.
필자의 경우 앱 테마는 android:windowBackground
파란색입니다. 이로 인해 전환시 파란색 깜박임이 발생하여 매우 실망 스러웠습니다. 그러나 전체 앱에 영향을 미치는 변경을하기보다는 지금은 빠르고 더러운 옵션을 사용합니다.