ImageView更改后返回共享元素转换

时间:2016-03-31 10:54:46

标签: android animation imageview fragment shared-element-transition

我在两个片段之间有一个完全工作的共享元素转换,比如A到B,它们都共享一个ImageView。除非我在B上替换共享的ImageView,否则一切正常。目前我正在使用以下代码更改它:

Glide.with(getActivity())
                .load(getArguments().getString(Constants.APPVIEW_FEATURE_IMAGE_URL)).asBitmap()
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        if (getView() != null) {
                            ((ImageView) getView().findViewWithTag(Constants.TAG_FGRAPHIC)).setImageBitmap(resource);
                        }
                    }
                });

我将从B上的A接收的ImageView替换为更高的定义,因为这是一个将从listView扩展到全宽标题的标题Image。

问题在于当从B返回到A时,动画出错了,因为当我按Back时,图像会立即改变尺寸,而不是使用从B尺寸缩小到A尺寸的动画。它仍然正确地从标题移动到A位置,这只是尺寸问题。

如果我不替换图像,则不会发生任何问题,一切正常。

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我不知道如何用Glide做到这一点,但这就是我用Picasso做的。

             Picasso.with(context)
                    .load(AppController.getInstance().getThumbor().buildImage(url)
                            .resize(widthPlaceholder, heightPlaceholder)
                            .fitIn()
                            .toUrl())
                    .placeholder(R.color.light_gray)
                    .centerCrop()
                    .noFade()
                    .config(Bitmap.Config.RGB_565)
                    .into(target);

            Target target = new Target() {

                @Override
                public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                    Drawable d = new BitmapDrawable(context.getResources(), bitmap);
                    Picasso.with(context)
                            .load(AppController.getInstance().getThumbor().buildImage(url)
                                    .resize(width, height)
                                    .fitIn()
                                    .toUrl())
                            .placeholder(d)
                            .centerCrop()
                            .noFade()
                            .config(Bitmap.Config.RGB_565)
                            .into(imageView);
                }

                @Override
                public void onBitmapFailed(Drawable errorDrawable) {
                    Picasso.with(context)
                            .load(AppController.getInstance().getThumbor().buildImage(url)
                                    .resize(width, height)
                                    .fitIn()
                                    .toUrl())
                            .placeholder(R.color.light_gray)
                            .config(Bitmap.Config.RGB_565)
                            .centerCrop()
                            .noFade()
                            .into(imageView);
                }

                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {
                    Picasso.with(context)
                            .load(AppController.getInstance().getThumbor().buildImage(url)
                                    .resize(width, height)
                                    .fitIn()
                                    .toUrl())
                            .placeholder(placeHolderDrawable)
                            .config(Bitmap.Config.RGB_565)
                            .centerCrop()
                            .noFade()
                            .into(imageView);
                }
            };

我正在加载较低分辨率的图片,我将其作为占位符(背景图片),而不是触发更高分辨率的图片加载。