android – Ripple效果无法使用共享元素转换和RecyclerView

android – Ripple效果无法使用共享元素转换和RecyclerView,第1张

概述当`RecyclerView项单击启动详细活动时,我有一个共享元素转换,但项目点击的涟漪效果永远不可见 使用共享元素转换启动活动 Intent intent = IntentUtils.createDetailsIntent(InspectionListFragment.this.getContext(), record);Bundle options = ActivityOptionsComp 当`RecyclerVIEw项单击启动详细活动时,我有一个共享元素转换,但项目点击的涟漪效果永远不可见

使用共享元素转换启动活动

Intent intent = IntentUtils.createDetailsIntent(inspectionListFragment.this.getContext(),record);Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),vIEw,getString(R.string.Transition_element)).toBundle();getActivity().startActivity(intent,options);

我注意到了这条日志消息

D/Openglrenderer: endAllStagingAnimators on 0x95e86600 (rippledrawable) with handle 0xaa6c2760

如果我删除了转换,则纹波有效(我没有看到此消息).

延迟活动开始使用Handler

如果我使用带有postDelayed的Handler来启动Activity,则结果是混合的.我看到了波纹,但过渡并不顺利:

handler.postDelayed(new Runnable() {        @OverrIDe        public voID run() {            Intent intent = IntentUtils.createDetailsIntent(inspectionListFragment.this.getContext(),record);            Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),getString(R.string.Transition_element)).toBundle();            getActivity().startActivity(intent,options);        }    },200);

使用ListVIEw

请注意,使用具有相同项目布局和makeSceneTransitionAnimation的ListVIEw可以正常工作.不幸的是,这不合适.

项目布局

<linearLayout    androID:background="?androID:attr/selectableItemBackground"    androID:clickable="true"    androID:focusable="true"
解决方法 当我在卡片中使用ImageVIEw作为共享元素时,我遇到了同样的问题.我能够通过使用CardVIEw作为共享元素转换(和涟漪效应)的源视图来解决它.

<androID.support.v7.Widget.CardVIEw    androID:ID="@+ID/itemCard"    androID:layout_wIDth="match_parent"    androID:layout_height="wrap_content"    androID:layout_margin="8dp"    app:cardCornerRadius="@dimen/card_corner_radius"    app:cardElevation="@dimen/card_elevation"    androID:layout_gravity="center"    androID:clickable="true"    androID:onClick="@{onItemClick}"    androID:foreground="?androID:attr/selectableItemBackground"    >

我正在使用数据绑定,但共享元素更改实际上只是选择不同的源视图:

// before://onItemClickListener.onItemClick(vIEw,getAdapterposition(),getItemID(),Pair.create((VIEw)b.itemImage,"activity_image"));// after:onItemClickListener.onItemClick(vIEw,Pair.create((VIEw)b.itemCard,"activity_image"));

在此之前,我也尝试使用短延迟的postDelayed,但我发现这种方法为我喜欢的导航添加了太多的延迟.

总结

以上是内存溢出为你收集整理的android – Ripple效果无法使用共享元素转换和RecyclerView全部内容,希望文章能够帮你解决android – Ripple效果无法使用共享元素转换和RecyclerView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1123751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存