Android Glide库不使用共享元素转换

时间:2015-06-18 18:51:48

标签: android android-glide

我希望采用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,但如果这不起作用,那将是一种交易破坏。如果有人有一些意见我会很感激,谢谢!

2 个答案:

答案 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与S​​haredElementTransition苦苦挣扎的人,我想我得到了一个有效的解决方法,或者至少它对我有用。在您的第二个活动或片段中使用此代码:

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();

希望有所帮助!