Android 共享元素转换-片段
我已将我的示例应用推到此处: 我在我的应用程序中遵循主细节模式。主片段(Android 共享元素转换-片段,android,android-fragments,android-transitions,shared-element-transition,fragment-transitions,Android,Android Fragments,Android Transitions,Shared Element Transition,Fragment Transitions,我已将我的示例应用推到此处: 我在我的应用程序中遵循主细节模式。主片段(MyRecyclerFragment/MyListFragment)显示文本视图列表。当用户单击这些文本视图中的任何一个时,将启动详细信息片段(MyDetailsFragment)。详细信息片段的标题(与用户单击的标题相同) 我正在努力实现以下过渡效果: 分解现有视图的过渡 用于显示视图的淡入淡出过渡 这两个片段之间共享的TextView的移动/转换转换 问题: 转换开始时,共享文本视图将消失。但是,如果单击列表的第一
MyRecyclerFragment
/MyListFragment
)显示文本视图列表。当用户单击这些文本视图中的任何一个时,将启动详细信息片段(MyDetailsFragment
)。详细信息片段的标题(与用户单击的标题相同)
我正在努力实现以下过渡效果:
- 分解现有视图的过渡
- 用于显示视图的淡入淡出过渡
- 这两个片段之间共享的TextView的移动/转换转换
- 转换开始时,共享文本视图将消失。但是,如果单击列表的第一项,共享转换将奇迹般地工作
- 如果详细信息布局发生更改,转换将起作用。请参见
。如果我完全删除FrameLayoutdetails.xml
,并将TextViewtitle\u栏
作为根LinearLayout的直接子级,共享元素转换将非常有效title
- 似乎epicentre因共享元素返回转换而改变。例如,如果我单击列表中的第7个TextView,则exit transition(explode)将该TextView作为震中。它上面的所有文本视图向上滑动,下面的文本视图向下滑动。但是,当从细节片段返回到主片段时,返回转换的中心不是单击的TextView李>
- 试试这个-
使用不同的转换名称设置每行图像-
然后单击项目,例如-@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; } }
在oncreate方法的EndFragment中,获取转换名称的键并在视图上设置-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();
相关的 如果你有答案,请投票支持我的答案。:)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; }
- 转换开始时,共享文本视图将消失。但是,如果单击列表的第一项,共享转换将奇迹般地工作
- 如果详细信息布局发生更改,转换将起作用。请参阅details.xml。如果我完全删除FrameLayout title_栏,并将TextView title作为根LinearLayout的直接子级,那么共享元素转换将非常有效
<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>
如果这两个问题相同,则应将其作为重复问题关闭。如果不是,那么您应该在此处提供完整答案,而不是仅提供链接答案。...