使用RecyclerView项目进行共享元素转换 –Android

使用RecyclerView项目进行共享元素转换 –Android,第1张

概述我正在尝试使用回收器视图中的元素进行共享元素转换.当用户单击我的回收器视图项内的textview时,将打开详细信息活动.在详细内容活动中,我显示了一些信息,我还有一个标签布局,使用毕加索从网址加载一些图像.转换为详细活动正在运行,但如果用户在加载所有图像之前返回主活动,则主活

我正在尝试使用回收器视图中的元素进行共享元素转换.当用户单击我的回收器视图项内的textvIEw时,将打开详细信息活动.在详细内容活动中,我显示了一些信息,我还有一个标签布局,使用毕加索从网址加载一些图像.转换为详细活动正在运行,但如果用户在加载所有图像之前返回主活动,则主活动中的回收器视图在反向动画后消失!当我禁用共享元素转换时,问题就消失了.

这两个活动都与片段有关.所以,我正在尝试在两个片段之间创建一个过渡,这两个片段处于不同的活动中.

在RecyclerVIEwAdapter中,我设置了转换名称:

public voID onBindVIEwHolder(final VIEwHolder vIEwHolder, int position) {  ...  vIEwHolder.profileImage.setTransitionname("profile"+position);

我的textvIEw的onClickListener(在Main Activity中的一个片段内):

Intent i = new Intent(getCurrentActivity(), DetailActivity.class);        ActivityOptionsCompat options = ActivityOptionsCompat.               makeSceneTransitionAnimation(getCurrentActivity(), (VIEw) profileImage, "profile"+position);        getCurrentActivity().startActivity(i, options.toBundle());

在具有共享元素的详细活动的片段内(在onCreateVIEw中):

profileImage.setTransitionname("profile"+position);

当意图发生时,我已经检查了两个活动中的转换名称.

我陷入了这个问题两天,看不到发生了什么.如果您需要更多关于它的信息或代码,请询问.

谢谢!

解决方法:

问题是共享元素转换是由Activity生命周期中的早期框架启动的.转换必须捕获其目标视图的开始和结束状态,以便构建正常运行的动画.因此,如果框架在共享元素的最终大小,位置和大小在被调用的Activity中给定之前启动共享元素转换,则转换将捕获其共享元素的不正确的结束值,并且生成的动画将完全失败.
如果共享元素依赖于AsyncTask,AsyncqueryHandler,Loader或其他类似的异步加载数据,那么在最终出现在被调用活动中之前,框架可能会在将数据传递回主线程之前启动转换.
所以,解决方案如下:

>在被调用活动的onCreate()方法中调用postponeEnterTransition().
>当您确定所有共享元素已正确定位和调整大小时,请调用startPostponedEnterTransition()以恢复转换.您会发现有用的常见模式是在OnPreDrawListener中启动推迟的转换,该转换将在测量和布局共享元素之后调用.

你使用Picasso,因为我知道Picasso在加载图像时有一个名为RequestCreator的回调.
例如:

private final Callback callBack = new Callback() {    @OverrIDe    public voID onSuccess() {        imageVIEw.getVIEwTreeObserver().addOnPreDrawListener(new VIEwTreeObserver.OnPreDrawListener() {            @OverrIDe            public boolean onPreDraw() {                imageVIEw.getVIEwTreeObserver().removeOnPreDrawListener(this);                MainActivity.this.startPostponedEnterTransition();                return true;            }        });    }    @OverrIDe    public voID one rror() {    }};RequestCreator requestCreator = Picasso.with(this).load(imageUrl);requestCreator.into(imageVIEw, callback);
总结

以上是内存溢出为你收集整理的使用RecyclerView项目进行共享元素转换 – Android全部内容,希望文章能够帮你解决使用RecyclerView项目进行共享元素转换 – Android所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1108240.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存