我有以下情况:
1) 我有一个带有显示图像缩略图的 GridView 的 Activity A。
2) 我有另一个 Activity B,它只有一个 PhotoView ( link ) 与其父级的大小相匹配。
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 应用程序。