我正在使用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,但是由于它会异步加载位图,所以不会播放转换,因为当它出现时还没有图像集。
拥有所有这些,我应该如何从内部存储中读取图像?我对所有这些动画的东西都很陌生,并且不知道我是否做得对。
+信息: 我不得不说,图像有原始尺寸(大),我尝试使用解码方法使它们变小,但我不确定这是一个好主意。
答案 0 :(得分:1)
您最好使用URI,然后在活动之间传递它而不是位图本身。
特别是当你通过一个捆绑包时,你会遇到1Mb的限制。
我使用Picasso和Glide完成了同样的操作,只需传递URI引用。