次のような状況があります。
1) 画像のサムネイルを表示する GridView を持つアクティビティ A があります。
2)親のサイズと一致する PhotoView (リンク)のみを持つ別のアクティビティ B があります。
3) GridView の任意の項目をクリックすると、小さなサムネイルが現在の位置とサイズからアニメーション化し、PhotoView の画像のサイズに変更されます。
スクリーンショット
私の実装
これは私が許可のために行ったことです。
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
これが私の移行ファイルです。これが私の仕様によると正しいことを願っています。
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform/>
<changeBounds/>
<changeTransform/>
</transitionSet>
ここでビューを取得し、トランジション名を設定しています。
View photo = (View) list.getChildAt(position).findViewById(R.id.fileThumb);
photo.setTransitionName("photo" + position);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(getActivity(), Pair.create(photo, photo.getTransitionName()));
Intent intent = new Intent(getActivity(), GalleryActivity.class);
intent.putExtra(Config.GALLERY_EXTRA, position);
getActivity().startActivity(intent, options.toBundle());
私のアクティビティB(完全にPhotoViewのみ)では、
final PhotoView photoView = new PhotoView(container.getContext());
relativeLayout.addView(photoView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
photoView.setTransitionName("position"+pos);
問題
アニメーションは機能しますが、期待したほどではありません。まったく滑らかではなく、グリッチがあります。私は何を間違っていますか?ここのどこかで間違いを見つけて改善できることを願っています。
例 - QuickPic アプリ、Sony Album アプリ。