Delay shared element transition to complete statel

2019-03-01 06:33发布

I've been trying out shared element transition on Lollipop. i have a recyclerview which loads some cards and one click the card expands to its details in the next activity.

I have set a ripple effect and a StateListAnimator on the card. But those are not visible cause the transition starts before these effects are completed.

Is there any way to delay the transition so that it can wait for the statelist animator and ripple to complete?

Here is the code I use

ActivityOptions options = null;
        if (Utilities.isLollipop()) {
            options = ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view, "hero_view"), Pair.create((View) fab, "fab"));
 startActivity(detailIntent, options.toBundle());
        }

Thanks in advance

2条回答
迷人小祖宗
2楼-- · 2019-03-01 06:51

The way that may help some that already have the Transitions setup in Second Activity:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().getSharedElementEnterTransition().setDuration(500);
    getWindow().getSharedElementReturnTransition().setDuration(500)
        .setInterpolator(new DecelerateInterpolator());
}
查看更多
对你真心纯属浪费
3楼-- · 2019-03-01 06:54

I ended up using a work around, but I still would want to know what is the right way of doing this and therefore leaving the question open.

The work around I did was 1. remove the state list animator and add that as an animator in the onclick method. 2. Used a Handler to post a delayed call to the activity

new Handler().postDelayed(new Runnable() {
                      @Override
                      public void run() {

                          Intent i=new Intent(SearxhJobs.this,JobsTypes.class);
                          startActivity(i);
                      }
                  }, 200);

P.S- I did end up removing the effect as it was not very intuitive.

查看更多
登录 后发表回答