android MaterialDesgin--activty过场动画

一、 简介

ActivityOptionsCompat是一个静态类,提供了为数不多的几个方法,下面我们来罗列一下:

1.

ActivityOptionsCompat.makeCustomAnimation(Context context, int enterResId, int exitResId)

2.

ActivityOptionsCompat.makeScaleUpAnimation(View source,int startX, int startY, int startWidth, int startHeight)

3.

ActivityOptionsCompat.makeThumbnailScaleUpAnimation(View source,Bitmap thumbnail, int startX, int startY)

4.

ActivityOptionsCompat.makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)

5.

ActivityOptionsCompat.makeSceneTransitionAnimation(Activity activity,Pair… sharedElements)

恩,就这5个方法可以调用,也就是说为我们提供了这么5中过度方式,在使用的时候我们需要在theme指定:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

当然也可以在theme中设置


接下来我们就一一进行了解一下

二、 makeCustomAnimation


public void click(View view) {

ActivityOptionsCompat compat = ActivityOptionsCompat.makeCustomAnimation(this,

R.anim.translate_in,R.anim.translate_none);

ActivityCompat.startActivity(this,

newIntent(this,Activity2.class),compat.toBundle());

}

三个参数,第一个是指当前activity,第二个和第三个参数分别是进入动画和退出动画,需要注意的是我们启动activity的方式是使用ActivityCompat.startActivity,最后一个参数我们使用compat.toBundle。

三、makeScaleUpAnimation

private voidlaunch(View view) {

ActivityOptionsCompat compat = ActivityOptionsCompat.makeScaleUpAnimation(view,

view.getWidth() /2,view.getHeight() /2,0,0);

ActivityCompat.startActivity(this, newIntent(this,Activity2.class),

compat.toBundle());

}

说明下几个参数,第1个参数是scale哪个view的大小,第2和3个参数是以view为基点,从哪开始动画,这里是该view的中心,4和5参数是新的activity从多大开始放大,这里是从无到有的过程。

(0,0)代表从无到最大

四、makeThumbnailScaleUpAnimation

该方法和上面的makeScaleUpAnimation非常相似,只不过,这里是通过放大一个图片,最后过度到一个新的activity,第2个参数是指那个图片要放大,3和4参数表示从哪开始动画,使用方法很简单,这里就不演示了。

五、makeSceneTransitionAnimation

private voidlaunch(View view) {

         ActivityOptionsCompat compat =

ActivityOptionsCompat.makeSceneTransitionAnimation(this,view,getString(R.string.transition));

ActivityCompat.startActivity(this, newIntent(this,Activity2.class),compat.toBundle());

}

前两个参数不用说了,那第三个参数是什么?是这样的?因为要协作动画的两个view在不同的activity中,那我们怎么指定是哪两个view呢?这里android

给我们提供了一个新xml配置项android:transitionName用来指定哪些view进行写作,

可以通过setTransitionName()来设置,(ps:值无所谓 ,只是一个标示)

六、 多个view的协作 makeSceneTransitionAnimation

private voidlaunch() {

Pair imagePair = Pair.create(mImageView,getString(R.string.image));

Pair textPair = Pair.create(mTextView,getString(R.string.name));

ActivityOptionsCompat compat = ActivityOptionsCompat

.makeSceneTransitionAnimation(this,imagePair,textPair);

ActivityCompat.startActivity(this, newIntent(this,Activity2.class),

compat.toBundle());

}

原理同上 只不过变成了多个view  所以在设置跳转的时候有些改动

在跳转之后的activity中  获取相应的view  然后设置与跳转的activity中相应view的相同的transitionName值 就ok了  

imageView= (ImageView) findViewById(R.id.ShowImageView);

imageView.setTransitionName("pic");

imageView.setImageDrawable(getDrawable(R.mipmap.p1_2));

在退出的时候

finishAfterTransition();


ps:在这两个activity的设置

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

getWindow().setEnterTransition(newExplode().setDuration(1000));

getWindow().setExitTransition(newExplode());

setContentView(R.layout.activity_show);

这个问题在文章最前面已经提起过   可以在theme中设置 也可以在代码中设置

你可能感兴趣的:(android MaterialDesgin--activty过场动画)