Activity間で共通の画像があって、それをシューンと移動させるのがマテリアルしてんじゃん!という感じなのでやってみた。
試したのは、エミュレータでAndroid 7.0です。全部のコードはここにある。
このような感じに動くシンプルなやつ
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); GlideApp.with(this) .load(R.drawable.sample) .into(binding.view1); RxView.clicks(binding.view1).subscribe(__ -> { ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( this, binding.view1, "image"); ContextCompat.startActivity(this, new NextActivity.IntentBuilder(this).build(), options.toBundle()); }); } }
遷移先のActivity
public class NextActivity extends AppCompatActivity { private ActivityNextBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_next); GlideApp.with(this) .load(R.drawable.sample) .into(binding.view1); RxView.clicks(binding.view1).subscribe(__ -> { ActivityCompat.finishAfterTransition(this); }); } static class IntentBuilder { private final Context context; IntentBuilder(Context context) { this.context = context; } Intent build() { return new Intent(context, NextActivity.class); } } }
あとは遷移先のImageViewにandroid:transitionName="image"
を指定してあげると動く。
案外簡単だった。windowに値をセットして〜〜〜とか説明してる記事がいくつかあったけど、特にいらなかった。試したのがAndroid 7.0だからかもしれない。またtransitionNameはstrings.xmlとかに書くのが本当はいいと思う。
時々変に移動する時がある。これはよくわからなかった。
時々ヒューンってどっかいくのウケる pic.twitter.com/AMKIwCi5OG
— ひさいち (@hisaichi5518) 2017年9月27日