ActivityCompat使用

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

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);
        }
    }

判断了版本是否大于16,因为只有16以上才会支持
startActivity(intent, options);
这也为我们解决了低版本适配的问题。但是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进行拉伸的动画。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值