码迷,mamicode.com
首页 > 其他好文 > 详细

用开源项目ActivityOptionsICS让ActivityOptions的动画实现兼容

时间:2014-11-28 11:42:49      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   io   ar   color   os   sp   

我之前写过一篇文章是讲解ActivityOption的api方法的(http://www.cnblogs.com/tianzhijiexian/p/4087917.html),当时吐槽各种动画不兼容,完全无视我们4.x或者2.x用户嘛,好在有开源库赖帮助我们实现动画。

ActivityOptionsICS

提供了和ActivityOptions、ActivityCompat基本一致的方法来实现相同的动画效果,总共有如下方法。

(1)public static ActivityOptionsCompatICS makeCustomAnimation(Context context,int enterResId, int exitResId)

参数:

enterId:进入动画的资源ID

exitId:退出动画的资源ID

设置自定义的Activity动画,出入的是动画资源的id。

这个方法和overridePendingTransition(R.anim.slide_bottom_in, android.R.anim.fade_out);十分类似,传入一个进入的动画和一个退出的动画即可

    public void customAnim() {
        ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeCustomAnimation(this,
                R.anim.slide_right_in, R.anim.slide_bottom_out);
        ActivityCompatICS.startActivity(MainActivity.this, intent, options.toBundle());
    }

 

(2)public static ActivityOptionsCompatICS makeScaleUpAnimation(View source, int startX, int startY,

int width, int height)

参数:

source:一个view对象,用户确定新activity启动的初始坐标

startX:新activity出现的初始X坐标,这个坐标是相对于source的左上角X坐标

startY:新activity出现的初始Y坐标,这个坐标相对于source的左上角Y坐标

width:新activity初始的宽度

height:新activity初始的高度

通过看源码可以很容易理解这些参数的意义

        int[] pts = new int[2];//ps = position,目的得到当前view相对于屏幕的坐标
        source.getLocationOnScreen(pts);
        // 设置起始坐标和起始宽高
        opts.mStartX = pts[0] + startX;
        opts.mStartY = pts[1] + startY;
        opts.mWidth = width;
        opts.mHeight = height;

实现的效果是:新的Activity从某个位置以某个大小出现,然后慢慢拉伸渐变到整个屏幕

public void scaleUpAnim(View view) {
        ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeScaleUpAnimation(view,
                 0, 0, //拉伸开始的坐标
                 view.getMeasuredWidth(), view.getMeasuredHeight());//初始的宽高
        ActivityCompatICS.startActivity(MainActivity.this, intent, options.toBundle());
    }

 

(3)public static ActivityOptionsCompatICS makeThumbnailScaleUpAnimation(View source, 

Bitmap thumbnail, int startX, int startY) 

参数:

source:一个view对象,用来确定起始坐标

thumbnail:一个bitmap对象,新的activity将通过这个bitmap渐变拉伸出现,新的activity初始大小就是这个bitmap的大小

startX:新activity初始的X坐标,相对于source左上角的X来说的

startY:新的activity初始的Y坐标,相对于source左上角Y坐标来说的

效果是:一个bitmap慢慢从某个位置拉伸渐变新的activity

public void thumbNailScaleAnim(ImageView view) {
        view.setDrawingCacheEnabled(true);
         Bitmap bitmap = view.getDrawingCache();
          ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeThumbnailScaleUpAnimation(
            view, bitmap, 0, 0);
          // Request the activity be started, using the custom animation options.
          ActivityCompatICS.startActivity(MainActivity.this, intent, options.toBundle());
          //view.setDrawingCacheEnabled(false);
    }

 

(4)public static ActivityOptionsCompatICS makeSceneTransitionAnimation(Activity activity, 

final View sharedElement,int sharedElementId)

参数:

activity:当前activity的对象

sharedElement:一个view对象,用来和新的activity中的一个view对象产生动画

sharedElemetId:新的activity中的view的Id,这个view是用来和原始activity中的view产生动画的

效果是:原始activity中的一个view随着新activity的慢慢启动而移动到新的activity中,实现补间动画

public void screenTransitAnim(View v,int id) {
        ActivityOptionsCompatICS options = ActivityOptionsCompatICS.
                makeSceneTransitionAnimation(this, v,id);
        ActivityCompatICS.startActivity(MainActivity.this, intent, options.toBundle());
    }

 

 

(5)public static ActivityOptionsCompatICS makeSceneTransitionAnimation(Activity activity,

Pair<View, Integer>... sharedElements)

参数:

activity:当前的activity

sharedElements:Pair对象,上面的一个方法是实现单一view的动画,这里可以有多个view对象进行动画

screenTransitAnimByPair(
                    Pair.create((View)orginalImageView, R.id.target_imageView),
                    Pair.create((View)orginalTextView, R.id.target_textView),
                    Pair.create((View)chromeIView, R.id.target_chrome_imageView));

 

    @SuppressWarnings("unchecked")
    public void screenTransitAnimByPair(Pair<View, Integer>... views) {
        ActivityOptionsCompatICS options = ActivityOptionsCompatICS.makeSceneTransitionAnimation(
                MainActivity.this, views);
        ActivityCompatICS.startActivity(MainActivity.this, intent, options.toBundle());
    }

 

用开源项目ActivityOptionsICS让ActivityOptions的动画实现兼容

标签:android   style   blog   http   io   ar   color   os   sp   

原文地址:http://www.cnblogs.com/tianzhijiexian/p/4128045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!