android基于Activity共享元素切换效果的实现
来源:互联网 发布:eos utility mac 下载 编辑:程序博客网 时间:2024/06/06 09:03
先上一张效果图:
主要用到的类有:
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_TITLE)); // 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); mHeaderTitle = (TextView) findViewById(R.id.id_tv_title); //加载图片 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(mHeaderTitle, VIEW_NAME_HEADER_TITLE); }
其中的VIEW_Name_XXX就是我们要用来绑定的Key
这个效果我是看着google的一个示例app模仿的, 把代码精简了一些...注释换成了中文
下面是我的app的链接, 和google原版的链接:
https://github.com/googlesamples/android-ActivitySceneTransitionBasic
https://github.com/ssthouse/MySceneTransitionTest
注释还算是比较详细的, 新手代码写的比较乱, 轻喷....
注:
代码中有一个style包, 是用来在android4.4上实现沉浸式体验的代码, 具体可以看一下我前面的一篇blog
- android基于Activity共享元素切换效果的实现
- 【Transition】Android炫酷的Activity切换效果,共享元素
- Android炫酷的Activity切换效果,共享元素
- android activity切换效果实现
- Android中Activity切换时共享视图元素的切换动画(5.0以上)
- Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)
- Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)
- Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)
- Android共享元素场景切换动画的实现
- Android共享元素场景切换动画的实现
- Android共享元素场景切换动画的实现
- Android 左右滑动切换页面或Activity的效果实现
- Android关于Activity切换效果的实现加强
- Android关于Activity切换效果的实现加强
- Android 左右滑动切换页面或Activity的效果实现
- android Activity切换时动画效果实现
- Android5.0 共享元素 实现不同页面的同一个View的切换效果
- android activity切换效果
- 在Mac OS系统下PyCharm编辑器的Hello word程序
- 阿里云服务器数据盘挂载
- 杭电(hdu)2070 Fibbonacci Number 水题
- log4j日志配置详解
- 安装WordPress
- android基于Activity共享元素切换效果的实现
- AJAX提交与FORM提交的区别
- mybatis异常 :元素内容必须由格式正确的字符数据或标记组成。
- Swift开发教程--设置圆角Button和圆角边框TextView
- 如何用AS画出简单的图形
- 字符串型 10进制数 转化为 字符串型16 进制数
- poj3311Hie with the Pie【状压dp 类TSP】
- c# winform datagridview 编辑单元格内容,没有保存编辑内容
- 开始要积累工作中的点点滴滴啦~~