ActivityCompat使用

来源:互联网 发布:哪个电视直播软件最好 编辑:程序博客网 时间:2024/05/17 07:28

今天在查看资料的时候看到了ActivityCompat这个类来启动Activity,ActivityCompat是v4包里新加的一个类,打开了看了看代码:

<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进行拉伸的动画。



0 0
原创粉丝点击