android - 共享元素过渡和 Fresco 无法正常工作

标签 android android-animation android-transitions fresco

我有两个 Activity ,都包含一个图像。我在一个 Activity 中使用 Fresco 加载图像,在另一个 Activity 中使用 Picasso 加载图像。以下是我的代码的相关部分:

第一个 Activity 中的图片

<com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/imageView102"
                android:transitionName="image"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="9dp"
                android:layout_marginRight="9dp"
                android:layout_marginTop="10dp"
                fresco:actualImageScaleType="centerCrop"
                fresco:placeholderImage="@color/wait_color"
                fresco:placeholderImageScaleType="fitCenter"
                fresco:viewAspectRatio="1.33"
                android:layout_marginBottom="10dp" />

第二个 Activity 中的图片

<uk.co.senab.photoview.PhotoView
        android:id="@+id/zoomable"
        android:transitionName="image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true" />

我在第二个 Activity 中使用 PhotoView 来放大和缩小图像。

第一个 Activity

Uri uri = Uri.parse(photoUrl);
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
                .setProgressiveRenderingEnabled(true)
                .build();
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .setOldController(image.getController())
                .build();
        image.setController(controller);
image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(ImageActivity.this, AlternateFullImageActivity.class);
                intent.putExtra("ID", photoId);
                intent.putExtra("photoUrl", photoUrl);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    ActivityOptionsCompat options = ActivityOptionsCompat.
                            makeSceneTransitionAnimation(ImageActivity.this, (View)image, "image");
                    startActivity(intent, options.toBundle());
                }
                else {
                    startActivity(intent);
                }
            }
        });

第二个 Activity

Intent intent = getIntent();
        photoId = intent.getExtras().getString("ID");
        photoUrl = intent.getExtras().getString("photoUrl");

        Picasso.with(AlternateFullImageActivity.this)
                .load(photoUrl)
                .into(image);
        mAttacher = new PhotoViewAttacher(image);

问题是,过渡并不顺利而且非常快。我读了here我需要将转换更改为 ChangeBounds。如何将过渡更改为该过渡以及如何为该过渡添加持续时间,比如 1000 毫秒?

最佳答案

在新版本的 Fresco 中,有一个自定义过渡可以轻松完成。

在他们自己的存储库中查看这个示例:

https://github.com/facebook/fresco/tree/master/samples/transition

基本上,您必须调用 setSharedElementEnterTransition() 并在 opening Activity 上进行相应的转换:

getWindow().setSharedElementEnterTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.CENTER_CROP,ScalingUtils.ScaleType.FIT_CENTER));
getWindow().setSharedElementReturnTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.FIT_CENTER,ScalingUtils.ScaleType.CENTER_CROP));

关于android - 共享元素过渡和 Fresco 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039966/

相关文章:

android - 在滑动时创建从一种布局到另一种布局的透明扩展圆圈过渡动画

android - 可绘制图层列表中的动画项目

android - 如何使用导航组件在 Android fragment 转换上收听转换完成?

android - Webview 不是每次都加载

android - Eclipse 启动挂起, "Android SDK: resolving error markers"

java - 如何修复Gradle Build中的 “Failed to process kafka-clients-1.1.1.jar”错误

android - 如何更改切换按钮的颜色?

Android Studio : ImageButton image/background flash

Android数据绑定(bind)和场景转换

android - 列表项的过渡以扩展为 Google Inbox 等详细信息