- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当 2 个 ImageViews
从一个屏幕转到下一个屏幕时,我正在尝试实现共享元素转换。其中一张图像在两个屏幕上都有 centerCrop
的 scaleType。我面临的问题是,当过渡开始时,图像将在将其动画化到下一个屏幕之前变为原始大小(裁剪之前)。当它到达下一个屏幕时,它以原始大小到达它,然后才被裁剪到目标 ImageView 。
整个体验并不流畅,而且真的让人眼花缭乱。我使用的代码是:
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());
}
图像是使用 Glide
从网络加载的,代码如下:
Glide.with(mActivity).load(articleCoverData.mImageUrl).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.SOURCE).dontTransform().into(holder.coverImage);
在接收端,图像加载如下:
Glide.with(mContext).load(mData.mImageUrl).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mCoverImageView);
在我定义的样式中:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Add this line -->
<item name="android:windowContentTransitions">true</item>
<!-- This is the color of the Status bar -->
<item name="colorPrimaryDark">@color/transparent</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>
当 change_image_transform
为:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform/>
</transitionSet>
编辑:尝试将过渡更改为:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds/>
<changeTransform/>
<changeImageTransform/>
</transitionSet>
或
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds/>
<changeImageTransform/>
</transitionSet>
但结果是一样的。
问题是:我是不是遗漏了什么,我还需要做些什么来让这种体验变得窒息吗?或者这是一个 Android 错误?
最佳答案
终于解决了这个问题。使用以下代码和配置实现了预期的结果:
private static void startAnimatedTransitionIntent(Activity context, View view, ArticleCoverData articleCoverData) {
Intent intent = new Intent(context, ReaderActivity.class);
intent.putExtra(Constants.ARTICLE_DATA, articleCoverData);
View coverStartView = view.findViewById(R.id.coverImage);
View coverDiagonalDecoratorStartView = view.findViewById(R.id.diagonal_image_decorator);
Window window = context.getWindow();
View decor = window.getDecorView();
View navigationBarStartView = decor.findViewById(android.R.id.navigationBarBackground);
List<Pair<View, String>> pairs = new ArrayList<>();
pairs.add(Pair.create(coverStartView, context.getString(R.string.transition_timeline_cover_image_to_reader_name)));
pairs.add(Pair.create(coverDiagonalDecoratorStartView, context.getString(R.string.transition_timeline_cover_image_diagonal_decorator_to_reader_name)));
if (navigationBarStartView != null) {
pairs.add(Pair.create(navigationBarStartView, Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME));
}
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(context, pairs.toArray(new Pair[pairs.size()]));
ActivityCompat.startActivity(context, intent, options.toBundle());
}
我正在使用 Picasso 和以下代码将图像加载到 ImageView 中:
Picasso.with(mActivity).load(articleCoverData.mImageUrl).into(articleVH.coverImage);
在接收方,我以相同的方式应用图像:
Picasso.with(mContext).load(mData.mImageUrl).into(mCoverImageView);
风格:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/app_red</item>
<item name="android:windowContentTransitions">true</item>
<!-- This is the color of the Status bar -->
<item name="colorPrimaryDark">@color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<!--<item name="android:windowEnterTransition">@transition/cheeses_enter</item>-->
<!--<item name="android:windowExitTransition">@transition/cheeses_exit</item>-->
<item name="android:windowSharedElementEnterTransition">@transition/cheeses_enter</item>
<item name="android:windowSharedElementExitTransition">@transition/cheeses_exit</item>
</style>
两个转换:cheeses_enter
和 cheeses_exit
是:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet>
<changeBounds />
<changeTransform />
<changeClipBounds />
<changeImageTransform />
</transitionSet>
重要的是使用 ImageView scaleType 参数应用缩放类型,而不是使用 Picasso crop 或 Glide crop。
因为如果您这样做,裁剪和取消裁剪操作将作为过渡的一部分执行。
关于android - 具有 scaleType centerCrop 过渡的共享元素是跳跃的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961948/
滚动时,我的移动设备底部的固定元素出现问题。看起来每次滚动时都会重新计算高度,因为移动设备上的文档高度增加了。 我认为原因是地址栏淡出并且文档视口(viewport)变大了。我进行了很多搜索并尝试了不
以下是插入到我自己的哈希表中时进行冲突检测的方法的内部。我正在使用小的测试数字并尝试使我的逻辑正确,变量哈希设置为 0,table.length 为 10。 else {
我正在做一个大元素,之前只用过几次转换,所以我没有太多经验。这次客户对效果有很多要求。 我有一个#item,里面有一个按钮和一个透明的div。将鼠标悬停在透明 div 上的 opacity 更改为 0
我是一个十足的 Java 新手。上周一开始,之前从未用任何语言进行过任何编程。因此,如果我发现简单的事情变得复杂,请耐心等待。 我收到了一个文本文件。如下图: 第一个数据是时间(午夜过后的秒数),第二
在 pygame 中计算重力的最佳方法是什么?我基本上只需要它,所以当玩家按下“向上”时,角色会跳跃。到目前为止,这是我的代码(只是一个带有移动的红色 block 的白色屏幕) import pyga
我用一个简单的渐变扩展了 JComponent 并调整了paintComponent()方法来制作我自己的BottomBar。 然后我将它添加到使用 BorderLayout 的 JFrame 的 S
我使用 Chart.js 渲染折线图。我不想重新调整 x 轴以获得更多样本点。 如果 y 轴值不连续变化,渲染跳跃的最佳方法是什么? 理想情况下,我能够为每个 x 值定义两个 y 值。因此,假设我传入
我有用于左、右、上、下移动的 Sprite 的 KeyEvents。我只是在闲逛,正在考虑另一个我希望 Sprite 跳跃的项目。它不必完全现实,因为我才刚刚开始。我所拥有的是,当按下空格键时,它将导
我运行双显示器设置。 从显示器 1 到显示器 2(或反之亦然)需要大量不必要的鼠标移动。 我的想法是利用一个额外的鼠标按钮(我有两个)并让鼠标从显示器 1 上的 XY 坐标超跳(向星际迷航道歉)到显示
我有一个 slider 可以实时更新其右侧标签上的值。当值从 1 位值变为 2 位值时,我应该怎么做才能防止它“跳跃”?我怎样才能给标签一个固定的位置,这样它就不会改变布局: var range =
我在页面上使用光滑的 slider 。一切都很好,除了一件事:当我拖动幻灯片时,有时图像或文本会弹起,这看起来非常糟糕。我该怎么做才能避免这个问题? 这是我的 code
const int jumpHeight = 10; //Non-Const variables bool running = true
我有一个 bootstrap Accordion 崩溃,它工作得很好,虽然有一件事困扰着我。当正在展开的元素很长并且做一个垂直滚动条时,它也会使整个页面向左小跳,但只要内容不大,一切都是流畅的。 有谁
我开始学习一些 SVG(我想还有 javascript),并且我很难理解为什么这不顺利。 0 移动了少量(大概是 x 轴上水平的“1”),但开始大幅跳跃。这是因为我使用的浏览器(Chrome)刷新/重
我想创建像飞翔的小鸟一样的游戏。我希望玩家在屏幕上连续跳跃。我创建了这段代码,它不像一只飞扬的小鸟跳跃 代码: float jump = 100; // Just example if(Gdx.inp
如下图所示,.hero div 的高度在滚动经过某个点时发生变化(Chrome、Android 6.0.1)。 这是相关的CSS .hero { height: 100%; width
当我将鼠标悬停在 li 上时,我有菜单有点摆动。如何停止摆动。 代码在这里 JSFiddle 最佳答案 摆脱它的最简单方法是像这样修改 css: .inner LI { border: 1px s
我试图让 dino 跳跃,但是当我在 dino 跳跃和下落之间使用 time.sleep(0.1) 时,整个游戏停止0.1秒。 我试过使用 time.sleep,仅此而已,因为我在网上找不到任何其他有
我正在使用 andengine 来实现一个可以使用它在屏幕上拖动的 Sprite 。 所以我想做的是当用户点击屏幕上的任何位置时使 Sprite 跳跃。 或者向上移动然后向下移动。 使用 andeng
我有一个包含 webview 的 viewflipper。在某些情况下(看似随机),webview 的底部会出现抖动/跳跃。这可以持续一秒到几秒之间的任何时间。这是一个视频来说明我在说什么 http:
我是一名优秀的程序员,十分优秀!