0

Я оттолкнула мою пример приложения здесь: https://bitbucket.org/user1010/transitiondemoОбщие элементные переходы - фрагменты

Я следую мастер-деталь рисунка в моем приложении. Мастер-фрагмент (MyRecyclerFragment/MyListFragment) показывает список текстовых просмотров. Когда пользователь нажимает на любое из этих текстовых просмотров, запускается фрагмент сведений (MyDetailsFragment). Фрагмент детали имеет название (то же самое, что и тот, на который пользователь нажал).

Я пытаюсь добиться следующего эффекта перехода:

  • Расчленить переход для выхода из соображения перехода
  • Fade для появления взглядов
  • Move/переход перевода для TextView которая разделена между этими 2 фрагментами

Вопросы:

  • Общий текстовый текст исчезает при начале перехода. Но общий переход чудесным образом работает, если щелкнуть первый элемент списка.
  • Переходный режим, если изменяется макет детали. См. details.xml. Если я полностью удалю FrameLayout title_bar и поставлю TextView title в качестве прямого дочернего элемента root LinearLayout, переход на общий элемент работает отлично.
  • Кажется, что эпицентр меняется для общего элемента return переход. Например, если я нажму на 7-й TextView в списке, переход на выход (взорвать) принимает этот TextView как эпицентр. Все текстовые элементы над ним сдвинутся вверх, а TextViews под ним сдвинутся вниз. Но, возвращаясь из фрагмента детали, чтобы осваивать фрагмент, эпицентром для обратного перехода является не TextView, который был нажат.

ответ

-1

попробовать с этим -

установить изображение каждой строки с разными-разными именами перехода -

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View view = convertView; 

     if (view == null) { 
      view = LayoutInflater.from(getContext()).inflate(R.layout.list_item, null); 
     } 

     TextView textView = (TextView) view.findViewById(R.id.textView); 

     ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      textView.setTransitionName("transtext" + position); 
      imageView.setTransitionName("transition" + position); 
     } 

     return view; 
    } 
} 

затем нажмём, например -

ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
      TextView textView = (TextView) view.findViewById(R.id.smallerImageView); 

      EndFragment endFragment = new EndFragment(); 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

       imageTransitionName = imageView.getTransitionName(); 
       textTransitionName = textView.getTransitionName(); 



setSharedElementReturnTransition(TransitionInflater.from(
         getActivity()).inflateTransition(R.transition.change_image_trans)); 


    setExitTransition(TransitionInflater.from(
        getActivity()).inflateTransition(android.R.transition.fade)); 

      endFragment.setSharedElementEnterTransition(TransitionInflater.from(
        getActivity()).inflateTransition(R.transition.change_image_trans)); 
      endFragment.setEnterTransition(TransitionInflater.from(
        getActivity()).inflateTransition(android.R.transition.fade)); 

      } 

Bundle bundle = new Bundle(); 

     FragmentManager fragmentManager = getFragmentManager(); 

      bundle.putString("TRANS_NAME", imageTransitionName); 
      bundle.putString("TRANS_TEXT", textTransitionName); 
      endFragment.setArguments(bundle); 

      fragmentManager.beginTransaction() 
        .replace(R.id.container, endFragment) 
        .addToBackStack("Payment") 
        .addSharedElement(imageView, imageTransitionName) 
        .addSharedElement(textView, textTransitionName) 
        .addSharedElement(staticImage, getString(R.string.fragment_image_trans)) 
        .commit(); 

В EndFragment в oncreate метод получить ключ от имени перехода и установить на вид -

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     Bundle bundle = getArguments(); 
     String actionTitle = ""; 
     Bitmap imageBitmap = null; 
     String transText = ""; 
     String transitionName = ""; 

     if (bundle != null) { 
      transitionName = bundle.getString("TRANS_NAME"); 
      actionTitle = bundle.getString("ACTION"); 
      imageBitmap = bundle.getParcelable("IMAGE"); 
      transText = bundle.getString("TRANS_TEXT"); 
     } 

     getActivity().setTitle(actionTitle); 
     View view = inflater.inflate(R.layout.fragment_end, container, false); 

     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      view.findViewById(R.id.listImage).setTransitionName(transitionName); 
      view.findViewById(R.id.smallerImageView).setTransitionName(transText); 
     } 

     ((ImageView) view.findViewById(R.id.listImage)).setImageBitmap(imageBitmap); 
     ((TextView) view.findViewById(R.id.smallerImageView)).setText(actionTitle); 

     return view; 
    } 

связанные https://stackoverflow.com/a/31982516/3150663

Голосуйте мой ответ, если вы получили решение. :)

+1

Если эти два вопроса идентичны, то они должны быть закрыты как дубликаты. Если это не так, тогда вы должны предоставить полный ответ здесь, а не только ответ на ссылку. – josliber

+0

JaiSoni, @ JaiSoni отредактирован .. –

0
  • Общий текстовый текст исчезает при начале перехода. Но общий переход чудесным образом работает, если щелкнуть первый элемент списка.
  • Переходный режим, если изменяется макет детали. См. Подробности.xml. Если я полностью удалю FrameLayout title_bar и поставлю заголовок TextView в качестве прямого дочернего элемента root LinearLayout, переход с разделяемыми элементами работает отлично.

Кажется детали TextView не могут быть анимированными за пределами его родительских границ. Попробуйте установить clipChildren в false для всех родительских представлений вашего TextView в вашем файле details.xml. Это работает для меня.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:clipChildren="false" 
       android:orientation="vertical"> 

    <FrameLayout 
     android:id="@+id/title_bar" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:clipChildren="false"> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:background="@android:color/white" 
      android:gravity="center" 
      android:text="@string/dummy_title" 
      android:textColor="@android:color/black"/> 
    </FrameLayout> 
    ... 
</LinearLayout>