Сбой при переходе к общему элементу для элементов GridView

У меня следующая ситуация:

1) У меня есть Activity A с GridView, показывающим миниатюры изображений.

2) У меня есть другое действие B, в котором есть только PhotoView (ссылка), совпадающее с размером его родителя.

3) Когда я нажимаю на любой элемент в GridView, маленькая миниатюра должна анимироваться из своего текущего положения и размера и меняться до размера изображения в PhotoView.

Скриншот

Действие A с GridViewДействие B с 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.


comment
Поскольку ваш переход работает, это указывает на то, что связи между двумя действиями установлены правильно. Глюки могут быть вызваны несколькими разными причинами. Можете ли вы опубликовать запись экрана проблемы? (Вы можете захватить его в Android Studio)   -  person George Mount    schedule 29.05.2015


Ответы (1)


Я знаю, что это старый вопрос, и вы, вероятно, уже нашли решение, но из того, что я вижу, похоже, что вы используете разные имена переходов («позиция» + позиция против «фото» + позиция). Это вообще работает?

Второе, что приходит мне на ум, это то, что загрузка изображения в представление изображения требует ресурсов, поэтому, возможно, вам потребуется загрузить его асинхронно и использовать delayEnterTransition, чтобы второе действие могло правильно загрузить изображение перед просмотром анимации.

Тем не менее, я новичок в анимации Android, так что это всего лишь предположение и мои 2 цента. Надеюсь, я не совсем ошибаюсь, и этот ответ кому-нибудь поможет :)

person xxtesaxx    schedule 24.03.2017
comment
Спасибо за ваши предложения. Я уже давно не пробовал. - person Aritra Roy; 25.03.2017