先上一张效果图:
主要用到的类有:
android.support.v4下的三个类:
ActivityOptionsCompat, ActivityCompat, ViewCompat
这三个类的主要作用就是 适配不同的android版本, 即使是在不支持这种效果的设备上也不回发生异常;
下面开始贴代码:
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //获取数据(AdapterView的getItemAtPosition调用的就是Adapter的getItem()....我才知道...) Item item = (Item) parent.getItemAtPosition(position); Intent intent = new Intent(MainActivity.this, DetailActivity.class); //传入选中的Item对应的ID intent.putExtra(DetailActivity.EXTRA_PARAM_ID, item.getId()); //主要的语句 //通过makeSceneTransitionAnimation传入多个Pair //每个Pair将一个当前Activity的View和目标Activity中的一个Key绑定起来 //在目标Activity中会调用这个Key ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation( MainActivity.this, new Pair<View, String>(view.findViewById(R.id.id_iv), DetailActivity.VIEW_NAME_HEADER_IMAGE), new Pair<View, String>(view.findViewById(R.id.id_tv), DetailActivity.VIEW_NAME_HEADER_ )); // ActivityCompat是android支持库中用来适应不同android版本的 ActivityCompat.startActivity(MainActivity.this, intent, activityOptions.toBundle()); } });MainActiviy中其实就只有一个GridView用于展示一些简单的图片,然后在点击Item的时候跳转到DetailActivity;其中最总要就是这几句话:
ActivityOptionsCompat.makeSceneTransitionAnimation;
这句话创建了一个用于绑定两个Activity之间共享的View的key-value对, 说是共享View其实还是两个Activity各有一个View;
我们只是将这两个Activity中的View用同一个Key(String)绑定了, 然后系统会自动帮我们生成切换动画;
在DetailActivity也就是要跳转的Activity中也有几句重要的语句:
private void initView(){ TransparentStyle.setTransparentStyle(this, R.color.color_primary); ViewHelper.initActionBar(this, getSupportActionBar(), "Transition"); mHeaderImageView = (ImageView) findViewById(R.id.id_iv); mHeader = (TextView) findViewById(R.id.id_tv_ ); //加载图片 Picasso.with(mHeaderImageView.getContext()) .load(mItem.getPhotoUrl()) .noFade() .placeholder(R.mipmap.ic_launcher) .into(mHeaderImageView); //主要的语句---将当前Activity的View和自己定义的Key绑定起来 ViewCompat.setTransitionName(mHeaderImageView, VIEW_NAME_HEADER_IMAGE); ViewCompat.setTransitionName(mHeader , VIEW_NAME_HEADER_ ); }其中的VIEW_Name_XXX就是我们要用来绑定的Key
这个效果我是看着google的一个示例app模仿的, 把代码精简了一些...注释换成了中文
下面是我的app的链接, 和google原版的链接:
https://github.com/googlesamples/android-ActivitySceneTransitionBasic
https://github.com/ssthouse/MySceneTransitionTest
注释还算是比较详细的, 新手代码写的比较乱, 轻喷....
注:
代码中有一个style包, 是用来在android4.4上实现沉浸式体验的代码, 具体可以看一下我前面的一篇blog
继续阅读与本文标签相同的文章
上一篇 :
Meta-data的作用和自定义
-
C#之MemberwiseClone与Clone
2026-06-02栏目: 教程
-
C# 使用MarshalByRefObject跨程序调用方法
2026-06-02栏目: 教程
-
PDB文件:每个开发人员都必须知道的
2026-06-02栏目: 教程
-
远程桌面使用方法
2026-06-02栏目: 教程
-
数据库设计(Database Design)
2026-06-02栏目: 教程
