相关疑难解决方法(0)

具有scaleType centerCrop转换的共享元素是跳跃的

我正在尝试实现共享元素转换,当ImageViews一个屏幕上的2 转到下一个屏幕时.其中一个图像centerCrop在两个屏幕上都有scaleType .我面临的问题是,当转换开始时,图像将在其动画到下一个屏幕之前进入原始大小(裁剪之前).当它到达下一个屏幕时,它以原始大小到达它,然后它被裁剪到目标图像视图.

整个体验并不顺畅,真正让人眼前一亮.我使用的代码是:

public void animateIntent(View view, ArticleCoverData articleCoverData) {
    Intent intent = new Intent(mActivity, ReaderActivity.class);
    intent.putExtra(Constants.ARTICLE_DATA, articleCoverData);

    // The view animation will start from
    View coverStartView = view.findViewById(R.id.coverImage);
    View coverDiagonalDecoratorStartView = view.findViewById(R.id.diagonal_image_decorator);

    Pair<View, String> pair1 = Pair.create(coverStartView, mActivity.getString(R.string.transition_timeline_cover_image_to_reader_name));
    Pair<View, String> pair2 = Pair.create(coverDiagonalDecoratorStartView, mActivity.getString(R.string.transition_timeline_cover_image_diagonal_decorator_to_reader_name));

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(mActivity, pair1, pair2);
    ActivityCompat.startActivity(mActivity, intent, options.toBundle());
}
Run Code Online (Sandbox Code Playgroud)

使用Glide以下代码从Web加载图像:

Glide.with(mActivity).load(articleCoverData.mImageUrl).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.SOURCE).dontTransform().into(holder.coverImage);
Run Code Online (Sandbox Code Playgroud)

在接收方,图像加载如下:

Glide.with(mContext).load(mData.mImageUrl).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mCoverImageView);
Run Code Online (Sandbox Code Playgroud)

在我定义的样式中:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Add this line -->
    <item name="android:windowContentTransitions">true</item>

    <!-- This is …
Run Code Online (Sandbox Code Playgroud)

android crop android-transitions shared-element-transition android-glide

11
推荐指数
1
解决办法
2940
查看次数

不同scaleType之间的Android共享元素转换

我关注了这篇android开发博客的文章,这里是他的源代码

该演示效果很好,但通常我们更喜欢centerCrop在图像列表中使用比例类型,并fitCenter在详细模式下使用。当我修改代码来实现这一点时,transition 无法处理缩放类型的变化。当从细节片段返回时,动画以错误的比例类型开始。

我找到了ChangeImageTransform过渡。该文件说:

此转换在场景更改之前和之后捕获 ImageView 的矩阵,并在转换期间对其进行动画处理。

与 ChangeBounds 结合,ChangeImageTransform 允许更改大小、形状或ImageView.ScaleType 的 ImageViews平滑地为内容设置动画。

所以我改变了过渡集:

<transitionSet
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="375"
    android:interpolator="@android:interpolator/fast_out_slow_in"
    android:transitionOrdering="together">
  <changeBounds/>
  <changeImageTransform/>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

但是动画变得越来越难看:

如何在不同比例类型之间平滑转换?

android shared-element-transition

6
推荐指数
1
解决办法
363
查看次数