活动转换+ ImageView(Android)

时间:2016-05-25 21:31:38

标签: android material-design android-transitions

我正在使用Android中的活动转换与下一个:

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

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

我正在分享两个ImageView:

在活动A中:

<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"/>

在活动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时,我必须用Bitmap填充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,但是由于它会异步加载位图,所以不会播放转换,因为当它出现时还没有图像集。

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

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

1 个答案:

答案 0 :(得分:1)

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

特别是当你通过一个捆绑包时,你会遇到1Mb的限制。

我使用Picasso和Glide完成了同样的操作,只需传递URI引用。