Подтвердить что ты не робот

Введите переход по фрагменту с общим элементом, которым предназначен общий элемент

Я использую новый Lollipop api для setEnterTransition для фрагмента, а затем добавляю общий переход элемента для изображения в фрагменте. Желаемое поведение во-первых, изображение должно перейти в свое положение, после чего остальные фрагменты в фрагменте должны исчезнуть.

Тем не менее, enterTransition применяется к общему элементу, поэтому он исчезает вместе с остальными видами. Если я не настрою enterTransition, изображение будет двигаться правильно, но пока оно перемещается, другое содержимое уже видно.

Как мне заставить его не применять enterTransition к общему виду?

Я нашел эту фиксацию в AOSP, которая, похоже, должна решить эту проблему, но она, похоже, не работает.

Вот пример кода:

public class Fragment1 extends Fragment {

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.main_fragment, container, false);
    final ImageView imageView = (ImageView) rootView.findViewById(R.id.image);
    final Button button = (Button) rootView.findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        TransitionSet transitionSet = new TransitionSet();
        transitionSet.addTransition(new ChangeImageTransform());
        transitionSet.addTransition(new ChangeBounds());
        transitionSet.setDuration(300);

        Fragment fragment2 = new Fragment2();
        fragment2.setSharedElementEnterTransition(transitionSet);
        fragment2.setSharedElementReturnTransition(transitionSet);
        Fade fade = new Fade();
        fade.setStartDelay(300);
        fragment2.setEnterTransition(fade);

        getFragmentManager().beginTransaction()
            .replace(R.id.container, fragment2)
            .addSharedElement(imageView, "SharedImage")
            .commit();
      }
    });
    return rootView;
  }
}
4b9b3361

Ответ 1

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

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#FFF"
    >
    <ImageView android:src="@drawable/pretty_picture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="picture"
        android:padding="20dp"/>
</FrameLayout>

Здесь ImageView является общим элементом.

Если это произойдет, вам нужно добавить волшебный переход: ChangeTransform. Если он обнаруживает, что родительский элемент изменяется, он вытаскивает общий элемент из родительского элемента и переводит его отдельно.