我有一个非常简单的案例。我想在RececlerView和中的项目之间实现共享元素转换fragment。我在我的应用程序中使用android导航组件。
上有一篇关于developer.android上的共享过渡和关于stackoverflow的文章,但是该解决方案仅适用于位于fragment布局中的视图,该视图开始过渡并且不适用于的项目RecyclerView。在github上也有一个lib,但是我不想依靠第三方的lib自己做。
有解决方案吗?也许应该工作,这只是一个错误?但是我还没有找到任何信息。
代码示例:
过渡开始
class TransitionStartFragment: Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_transition_start, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val testData = listOf("one", "two", "three")
val adapter = TestAdapter(testData, View.OnClickListener { transitionWithTextViewInRecyclerViewItem(it) })
val recyclerView = view.findViewById<RecyclerView>(R.id.test_list)
recyclerView.adapter = adapter
val button = view.findViewById<Button>(R.id.open_transition_end_fragment)
button.setOnClickListener { transitionWithTextViewInFragment() }
}
private fun transitionWithTextViewInFragment(){ …Run Code Online (Sandbox Code Playgroud) android shared-element-transition android-recyclerview android-architecture-navigation
我正在尝试使用片段之间共享元素的简单动画进行过渡。在第一个片段中,我在 RecyclerView 中有元素,在第二个片段中 - 完全相同的元素(在单独的 xml 布局中定义,在列表中的元素也是这种类型)在顶部和视图的其余部分中的细节。我正在为 bindViewHolder 和目标片段的 onCreateView 中的所有元素提供各种 transitionNames 我正在阅读它们并将它们设置为我想要进行过渡的元素。无论如何动画没有发生,我没有任何其他想法。下面我将我的代码片段来自源和目标片段以及列表适配器:
列表适配器:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = list[position]
ViewCompat.setTransitionName(holder.view, item.id)
holder.view.setOnClickListener {
listener?.onItemSelected(item, holder.view)
}
...
}
interface interactionListener {
fun onItemSelected(item: ItemData, view: View)
}
Run Code Online (Sandbox Code Playgroud)
列表片段(来源):
override fun onItemSelected(item: ItemData, view: View) {
val action = ListFragmentDirections.itemDetailAction(item.id)
val extras = FragmentNavigatorExtras(view to view.transitionName)
val data = Bundle()
data.putString("itemId", item.id)
findNavController().navigate(action.actionId, data, null, extras)
}
Run Code Online (Sandbox Code Playgroud)
源片段布局:
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/pullToRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent" …Run Code Online (Sandbox Code Playgroud) android android-animation kotlin android-transitions android-jetpack