代码之家  ›  专栏  ›  技术社区  ›  Alireza Noorali

如何在FirstFragment(包括RecyclerView)和SecondFragment之间使用共享元素转换

  •  0
  • Alireza Noorali  · 技术社区  · 8 年前

    我可以在两个片段之间实现共享元素转换,而无需使用RECYCLERVIEW!!!

    这是第一段:

     public class FirstFragment extends Fragment {
    
    ImageView img_small;
    LinearLayout layout_ofc_cities;
    LinearLayout layout;
    
    public FirstFragment() {
        // Required empty public constructor
    }
    
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_first, container, false);
    
        img_small = (ImageView) view.findViewById(R.id.img_small);
        layout_ofc_cities = (LinearLayout) view.findViewById(R.id.layout_ofc_cities);
        layout = (LinearLayout) view.findViewById(R.id.layout);
    
        layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    
                    setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans));
                    setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
    
                    SecondFragment secondFragment = new SecondFragment();
                    secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans));
                    secondFragment.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
    
                    FragmentTransaction ft = getFragmentManager().beginTransaction()
                            .replace(R.id.container, secondFragment)
                            .addToBackStack(null)
                            .addSharedElement(layout_ofc_cities, "transitionTxt")
                            .addSharedElement(img_small, "transitionImg");
                    ft.commit();
                }
    
            }
        });
    
        return view;
      }
    }
    

    这是SecondFragment:

     public class SecondFragment extends Fragment {
    
    public SecondFragment() {
    
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_second, container, false);
    
        return view;
      }
    
    }
    

    而且它有效! 但当我实现 RecyclerView 在FirstFragment中使用 SharedElementTransition 对于 LinearLayout 和一个 ImageView 属于 线条布局 和一个 图片框 在SecondFragment中它不起作用。

    我想要一个包含两个片段的示例代码,第一个片段中有RecyclerView,共享元素之间有动画。有人能帮我吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Alireza Noorali    8 年前

    我找到了答案:

    解决方案在本页上: http://jemsdevmobile.com/2016/02/11/lollipop-transition-between-activities/

    只需要更改xml标记。例如,将“imageview”更改为“imageview”