为什么使用?
现在很多项目都有很炫酷的转场动画,我们也必须得有,让项目更上档次,并且提高自己
知识点:ActivityOptionsCompat类以及共享元素的使用
转场动画分为两类:共享元素转场和普通转场
使用转场动画的前提是都得给予权限,给权限有两种方式
//方法一:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
//方法二:
修改主题:<item name="android:windowContentTransitions">true</item>
一、以前使用转场动画的方式
startActivity(new Intent(this, xxxx.class));
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
二、使用共享元素的转场方式
使用android:transitionName设置相同名字切换
<ImageView
android:id="@+id/activity_main_zhuanchang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="转场动画"
android:onClick="okhttp"
android:src="@mipmap/ic_launcher"
android:text="Okhttp/NoHttp"
android:transitionName="iv_test" />
按返回键的时候自动实现了转场动画,原因
public void onBackPressed() {
finishAfterTransition();
}
public void finishAfterTransition() {
if (!mActivityTransitionState.startExitBackTransition(this)) {
finish();
}
}
1、单个共享元素跳转方式:
ActivityOptionsCompat optionsCompat=ActivityOptionsCompat.makeSceneTransitionAnimation( this,imageView_zhuanchang,"iv_test");
Intent intent=new Intent(this, OkHttpActivity.class);
startActivity(intent,optionsCompat.toBundle());
2、多个共享元素跳转方式:
ActivityOptionsCompat optionsCompat1=ActivityOptionsCompat
.makeSceneTransitionAnimation(this,Pair.create((View)imageView_zhuanchang,"iv_test"),Pair.create((View)button,"button"));
Intent intent=new Intent(this, OkHttpActivity.class);
startActivity(intent,optionsCompat1.toBundle());
当然还可以这样:
//如果有共享元素,可以设置共享元素,那么他会按照共享元素执行动画,其他子view也会按照动画执行
ActivityOptionsCompat optionsCompat2=ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this);
Intent intent=new Intent(this, OkHttpActivity.class);
startActivity(intent,optionsCompat2.toBundle());
说明:1、ActivityOptionsCompat使用它,是为了兼容低版本的效果,虽然在低版本上没有卵用,但是不会报错。ActivityOptions类。只支持API21以上的版本。
2、 ActivityOptionsCompat中还有别的动画类型,自己可以试试
3、android:transitionName在你点击的控件和需要的控件都得设置,且名字相同才行
三、普通的转换动画(只有API 21以上才有下面自带效果)
这是三种系统自带的滑动效果(Slide)、展开效果Explode、渐变显示隐藏效果Fade
Fade fade=new Fade();
fade.setDuration(1000);
getWindow().setExitTransition(fade);//出去的动画
getWindow().setEnterTransition(fade);//进来的动画
提示:直接调用finish是没有动画的,原因看finish结束源码