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 引用。
我在 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 引用。