Activity 过渡 + ImageView (Android)

Activity Transitions + ImageView (Android)

我在 Android 中使用活动转换和下一个:

ActivityOptionsCompat options = ActivityOptionsCompat
  .makeSceneTransitionAnimation(activity, view, "image");

activity.startActivity(intent, options.toBundle());

我共享两个 ImageView:

在Activity答:

<android.support.v7.widget.AppCompatImageView android:id="@+id/iv_image"
   android:transitionName="image"
   android:layout_width="match_parent"
   android:scaleType="centerCrop"
   android:layout_height="150dp"/>

在Activity B:

<android.support.v7.widget.AppCompatImageView android:id="@+id/fullscreen_content"
    android:transitionName="image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"/>

问题是当我启动 Activity B 时,我必须用位图填充 ImageView:

String name = getIntent().getStringExtra(IMAGE_NAME_EXTRA);
ImageStorageManagement imageStorageManagement = new ImageStorageManagement(this);
Bitmap image = imageStorageManagement.decodeImage(name, 640, 480);

mContentView.setImageBitmap(image);

我的“decodeImage”方法如下所示:

public Bitmap decodeImage(String name, int reqWidth, int reqHeight) {
    File f = new File(getImagesDirectory(), name);
    String path = f.getAbsolutePath();

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

   options.inJustDecodeBounds = false;
   return BitmapFactory.decodeFile(path, options);
  }

当然,它会冻结应用程序大约一秒钟并中断流畅的运动。我试过使用 Picasso,但由于它异步加载位图,因此不会播放过渡,因为在它发生时还没有图像集。

有了这些,我应该如何从内部存储中读取图像?我对所有这些动画东西都很陌生,不知道我做的是否正确。

+信息: 我不得不说,图像有它们的原始大小(大),我尝试用解码方法使它们变小,但我不确定这是不是一个好主意。

您可能最好使用 URI,然后在活动之间传递它而不是位图本身。

特别是通过捆绑包时,您将 运行 达到 1Mb 的限制。

我使用 Picasso 和 Glide 做了同样的事情,只是传递 URI 引用。