我希望采用Glide library代替Universal Image Loader,但我遇到了有关共享元素转换的问题。
在我的简单沙箱中,我使用UIL创建了以下过渡:https://dl.dropboxusercontent.com/u/97787025/device-2015-06-18-113333.mp4
非常简单,而且运行正常。但是当我使用Glide时,看起来并不那么好:https://dl.dropboxusercontent.com/u/97787025/device-2015-06-18-114508.mp4
这是我正在使用的代码
第一项活动:
function $(element) {
if (arguments.length > 1) {
for (var i = 0, elements = [], length = arguments.length; i < length; i++)
elements.push($(arguments[i]));
return elements;
}
if (Object.isString(element))
element = document.getElementById(element);
return Element.extend(element);
}
第二个:
public class MainActivity extends BaseActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main);
final ImageView iv = (ImageView) findViewById(R.id.main_image);
displayImageGlide(BaseActivity.IMAGE_URL, iv, true);
Button button = (Button) findViewById(R.id.main_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), DifferentActivity.class);
startActivity(intent, iv);
}
});
}
}
BaseActivity只包含public class DifferentActivity extends BaseActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.different);
ImageView imageView = (ImageView) findViewById(R.id.diff_image);
displayImageGlide(BaseActivity.IMAGE_URL, imageView, false);
}
}
displayImageGlide
我已经尝试从Glide构建器中删除缓存行(用于阻止它缓存我正在尝试调整的内容),但这没有帮助。愿意采用Glide,但如果这不起作用,那将是一种交易破坏。如果有人有一些意见我会很感激,谢谢!
答案 0 :(得分:10)
我尝试了你的代码并获得了相同的结果,然后我尝试了另外一个实现:https://github.com/codepath/android_guides/wiki/Shared-Element-Activity-Transition
做了一些改变,我认为这是关键:
应该在ImageView上设置centerCrop,如果我们使用Glide设置它会导致同样的错误。 的 activity_main.xml中强>
background-color:transparent
<强> BaseActivity.java 强> 在MainActivity上,dontTransform应该为true,而在DifferentActivity上为false。
@keyframes backgroundintro {
0% {
background:#000000;
}
25% {
background:#0c2336;
}
100% {
background: linear-gradient(
rgba(255, 0, 0, 0.45),
rgba(255, 0, 0, 0.45)
), url('../IMG/background.png') no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
/*isolation: isolate;
mix-blend-mode: color-burn;*/
}
}
body {
animation-duration: 43.90s;
transition-timing-function: ease-in;
animation-name:backgroundintro;
}
修改,看看它的外观: https://www.dropbox.com/s/30s5l8awxogltls/device-2015-06-23-153153.mp4?dl=0
答案 1 :(得分:1)
对于那些使用Glide与SharedElementTransition苦苦挣扎的人,我想我得到了一个有效的解决方法,或者至少它对我有用。在您的第二个活动或片段中使用此代码:
postponeEnterTransition();
GlideApp.with(this)
.load(imageToLoad)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
startPostponedEnterTransition();
return false;
}
})
.into(imageView);
如果您要定位API&lt; 21,请使用:
supportPostponeEnterTransition();
supportStartPostponedEnterTransition();
希望有所帮助!