gpt4 book ai didi

android - RecyclerView 项目过渡到 fragment

转载 作者:行者123 更新时间:2023-11-29 01:04:12 25 4
gpt4 key购买 nike

我正在尝试创建从回收 View 到 fragment 的图像移动过渡。但问题是,在新的过渡图像显示后,移动动画不会发生,它只是与其余内容一起淡入。我做错了什么。我正在关注这个例子: http://mikescamell.com/shared-element-transitions-part-4-recyclerview/

我有带 ImageView 的回收 View 项目布局:

<?xml ...?>
<layout ...>
<data>
<variable name="model" type="..."/>
</data>
<LinearLayout ...>
<FrameLayout ...>
<ImageView android:id="@+id/image" .../>
</FrameLayout>
<LinearLayout ...>
...
</LinearLayout>
</LinearLayout>
</layout>

然后我有一个 fragment 布局,我想将图像从回收 View 移动到该布局。

<FrameLayout ...>
<TextView .../>
<ImageView android:id="@+id/logo" >
</FrameLayout>

这里是recycle my view的onBindViewHolder方法

@Override
public void onBindViewHolder(RecycleViewAdapter.ViewHolder holder, int position) {
final T object = getItem(position);

holder.getBinding().setVariable(BR.model, object);
holder.getBinding().executePendingBindings();

ViewCompat.setTransitionName(holder.getBaseView().findViewById(R.id.logo), "wb_logo");

holder.getBaseView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClick(view, object);
}
});
}

这是我主要 Activity 中的回收 View 项目点击处理程序

@Override
public void onFragmentItemClick(View view, Object object) {
PreviewFragment fragment = PreviewFragment.newInstance(Object.imageId, "");
getFragmentManager()
.beginTransaction()
.addSharedElement(view.getRootView().findViewById(R.id.logo), "wb_logo")
.addToBackStack(null)
.replace(R.id.fragment_container, fragment)
.commit();
}

在我不想为图像设置动画的 fragment 类中,我有以下设置:

@Override
public void onCreate(Bundle savedInstanceState) {
...
setSharedElementEnterTransition(
TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move));
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView imageView = view.findViewById(R.id.logo);
imageView.setTransitionName("wb_logo");
imageView.setImageResource(...);
}

我尝试将 transitionName 属性静态添加到 ImageView ,但结果是一样的。

编辑也许我的总体布局有问题。我的 fragment 容器在 DrawerLayout 中

<android.support.v4.widget.DrawerLayout ...>

<android.support.design.widget.CoordinatorLayout ...>

<android.support.design.widget.AppBarLayout ...>

<android.support.v7.widget.Toolbar ... />

</android.support.design.widget.AppBarLayout>

<FrameLayout android:id="@+id/fragment_container" .../>

</android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.NavigationView .../>

</android.support.v4.widget.DrawerLayout>

或者我正在使用的 fragment 类我正在使用

android.app.Fragment 

代替

android.support.v4.app.Fragment

android.support.v7.app.AppCompatActivity

最佳答案

我想出了我的问题所在:我在回收 View 中有多个项目,其中都包含带有 android:transitionName="wb_logo"的 ImageView。

我以某种方式忽略了回收 View 中的每个共享项目都必须具有唯一的 transitionName 这一点。当我修改 transitionName 以包含 id 后缀时,它开始按预期工作。

android:transitionName="wb_logo_1"

android:transitionName="wb_logo_2"

关于android - RecyclerView 项目过渡到 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48702015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com