Android - элемент перехода элемента разделяемого элемента Recyclerview
Надеюсь, вы могли бы помочь мне в этом вопросе. У меня есть два фрагмента, первый из них - это recyclerview с несколькими изображениями, второй фрагмент - это подробный вид этих изображений. Если пользователь нажимает на изображение, приложение выполняет транзакцию фрагмента и детали отображаются.
Я успешно реализовал переход между отдельными фрагментами между фрагментами, если щелкнуть маленькое изображение на первом фрагменте, оно становится больше и переходит в конечную позицию в представлении деталей.
Ну, тогда проблема, начальная позиция изображения не ожидаема, она начинает перемещать несколько пикселей из своего исходного положения, когда я нажимаю изображение, немного перескакивает вправо и в конец.
Почему это происходит? его раздражает!
Переход xml:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeTransform />
<changeBounds />
</transitionSet>
Если я делаю то же самое для кнопки вне recyclerview, она отлично работает. Это какая-то ошибка в recyclerview?
Ответы
Ответ 1
Элементам RecyclerView необходимо установить уникальное имя перехода на их общем представлении. Если вы представляете рендеринговую иерархию своего RecyclerView, в ней будет много элементов (представлений), имеющих одно и то же имя перехода. Таким образом, неясно для перехода, которым является фактический общий элемент. Например, вы можете добавить позицию к имени перехода вида, например. transition1, transition2 и т.д. Теперь, когда вы начинаете свой фрагмент детали, вам нужно передать ему имя перехода и установить это имя для общего представления в фрагменте детали, например. в onViewCreated().
Ответ 2
Если ваши общие элементы ImageView
s, вам также необходимо использовать переход ChangeImageTransform
. Попробуйте добавить <changeImageTransform />
к вашему набору переходов.
Ответ 3
Это может произойти, если правильный вид не будет получен из вашего вида ресайклера. Убедитесь, что вы используете точный вид (в зависимости от позиции) вместо корневого представления. Напр. в приведенном ниже фрагменте следует использовать View v (который вы получаете в onClick()):
mAdapter.setOnItemClickListener(
new MyAdapter.OnItemClickListener() {
@Override
public void onClick(View v, int position) {
ImageView heroView;
heroView = (ImageView) v.findViewById(R.id.category_icon);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
getActivity(), heroView, heroView.getTransitionName());
ActivityCompat.startActivity(getActivity(), intent, options.toBundle());
Ответ 4
Я решил эту проблему, следуя этой статье Переходы с общим элементом - часть 4: RecyclerView, которая показывает коды и дать подробное объяснение.
убедитесь, что android:transitionName
между разделяемыми элементами должен быть тем же, а также должен быть уникальным в иерархии представлений.
Что касается RecyclerView
- Fragment
, если мы установим transitionName
в XML, тогда все ImageView в галерее будет иметь одно и то же, что означает, что когда мы вернемся в галерею, структура не будет представлять, где для перемещения изображения.
Поскольку позиция элемента уникальна, поэтому лучше всего использовать здесь положение, чтобы установить имя перехода в onBindViewHolder
.