ActivityCompat使用
2016-05-25 11:02
405 查看
今天在查看资料的时候看到了ActivityCompat这个类来启动Activity,ActivityCompat是v4包里新加的一个类,打开了看了看代码:
判断了版本是否大于16,因为只有16以上才会支持
下面看看ActivityOptionsCompat(ActivityCompat通过ActivityOptionsCompat设置动画效果)所带的方法:
1、ActivityOptionsCompat.makeCustomAnimation(context, enterResId, exitResId):
2、ActivityOptionsCompat.makeScaleUpAnimation(source, startX, startY, startWidth, startHeight)
这个在4.x上有用,可以实现新的Activity从某个固定的坐标以某个大小扩大至全屏,我觉得效果挺不错的。
3、ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElement, sharedElementName):
当你需要当前界面中的某个元素和新界面中的元素有关时,你可以使用这个动画。
这个图片就是通过动画和上一个界面的图片进行了联系。
要使用这个方法就必须给两个不同Activity的中的布局元素设定同样的一个android:transitionName,然后还需要一个标志来告诉Window执行动画,因为这个只是在5.x上有效,不是本文的讨论范围。详细看官方文档即可。
标志:etWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
也可以参考文章:
http://blog.csdn.net/a396901990/article/details/40187203 http://blog.jobbole.com/77015/
在NewsDetailActivity的布局文件会有这样的代码:
4、ActivityOptionsCompat.makeSceneTransitionAnimation((Activity arg0, Pair<View, String>... arg1)
这个方法用于多个元素和新的Activity相关的情况,注意下第二个参数Pair这个键值对后面有...,标明是可以传入多个Pair对象的。
5、ActivityOptionsCompat.makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY)
这个方法可以用于4.x上,是将一个小块的Bitmpat进行拉伸的动画。
<span style="font-family:SimSun;font-size:14px;">public static void startActivity(Activity activity, Intent intent, @Nullable Bundle options) { if (Build.VERSION.SDK_INT >= 16) { ActivityCompatJB.startActivity(activity, intent, options); } else { activity.startActivity(intent); } }</span>
判断了版本是否大于16,因为只有16以上才会支持
<span style="font-family:SimSun;font-size:14px;">startActivity(intent, options);</span>这也为我们解决了低版本适配的问题。但是ActivityCompat最主要的作用是我们可以通过这个类来启动activity和添加动画。但不幸的是所有的动画都没有给2.x用的,大部分动画也对4.x不兼容。好消息是这个类是兼容2.x的,通过这个类编写的嗲吗,虽然不能给2.x带来动画,但也能确保全版本稳定运行,不会需要我们判断版本。也就是说如果你给5.x平台做了动画,其他平台虽然不会执行动画,但仍旧可以稳定打开activity。
下面看看ActivityOptionsCompat(ActivityCompat通过ActivityOptionsCompat设置动画效果)所带的方法:
1、ActivityOptionsCompat.makeCustomAnimation(context, enterResId, exitResId):
//让新的Activity从一个小的范围扩大到全屏 ActivityOptionsCompat options = ActivityOptionsCompat.makeCustomAnimation(this, R.anim.slide_bottom_in, R.anim.slide_bottom_out); startNewAcitivity(options);作用类似于:
overridePendingTransition(R.anim.slide_bottom_in, android.R.anim.fade_out);
2、ActivityOptionsCompat.makeScaleUpAnimation(source, startX, startY, startWidth, startHeight)
这个在4.x上有用,可以实现新的Activity从某个固定的坐标以某个大小扩大至全屏,我觉得效果挺不错的。
private void scaleUpAnimation(View view) { //让新的Activity从一个小的范围扩大到全屏 ActivityOptionsCompat options = ActivityOptionsCompat.makeScaleUpAnimation(view, //The View that the new activity is animating from (int)view.getWidth()/2, (int)view.getHeight()/2, //拉伸开始的坐标 0, 0);//拉伸开始的区域大小,这里用(0,0)表示从无到全屏 Intent intent = new Intent(this,DetailActivity.class); ActivityCompat.startActivity(this, intent, options.toBundle()); }
3、ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElement, sharedElementName):
当你需要当前界面中的某个元素和新界面中的元素有关时,你可以使用这个动画。
这个图片就是通过动画和上一个界面的图片进行了联系。
要使用这个方法就必须给两个不同Activity的中的布局元素设定同样的一个android:transitionName,然后还需要一个标志来告诉Window执行动画,因为这个只是在5.x上有效,不是本文的讨论范围。详细看官方文档即可。
标志:etWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
也可以参考文章:
http://blog.csdn.net/a396901990/article/details/40187203 http://blog.jobbole.com/77015/
NewsBean news = mAdapter.getItem(position); Intent intent = new Intent(getActivity(), NewsDetailActivity.class); intent.putExtra("news", news); View transitionView = view.findViewById(R.id.ivNews); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), transitionView, getString(R.string.transition_news_img)); ActivityCompat.startActivity(getActivity(), intent, options.toBundle());<span id="Label3"><span id="Label3"></span></span><span id="Label3"></span>
在NewsDetailActivity的布局文件会有这样的代码:
<ImageView android:id="@+id/ivImage" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:transitionName="@string/transition_news_img" android:scaleType="centerCrop" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.7" />
4、ActivityOptionsCompat.makeSceneTransitionAnimation((Activity arg0, Pair<View, String>... arg1)
这个方法用于多个元素和新的Activity相关的情况,注意下第二个参数Pair这个键值对后面有...,标明是可以传入多个Pair对象的。
5、ActivityOptionsCompat.makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY)
这个方法可以用于4.x上,是将一个小块的Bitmpat进行拉伸的动画。
相关文章推荐
- qinghua大乱斗C
- 删除node_modules文件下依赖层次过多的解决方法
- SDRAM(转)
- Tomcat:localhost:8080 报404错误
- Chrome调试工具奇淫技
- hadoop SequenceFile
- python中json/simplejson 序列化/dumps 自定义类型
- caffe中的softmax layer
- pycharm中的快捷键
- linux环境配置
- MapReduce、Hbase接口API实践
- C中,continue和break的用法
- Android中JNI的使用方法
- C字符串函数strcmp\strcpy\strcat\memcpy
- linux 下opencv的安装
- Win7 无法访问局域网共享文件服务器 提示密码错误的解决办法
- linux下监控工具sar命令详解
- excel 导出文件名乱码
- apk反编译 混淆
- SQL 查询优化