1.Touch Feedback(触摸反馈)
例子:水波纹效果
水波纹效果是5.0+自带的。
<Button
android:layout_width="wrap_content"
android:layout_height="100dp"
android:text="@string/hello_world" />
<Button
android:layout_width="wrap_content"
android:layout_height="100dp"
android:background="?attr/selectableItemBackground"
android:text="@string/hello_world" />
<Button
android:layout_width="wrap_content"
android:layout_height="100dp"
android:background="?attr/selectableItemBackgroundBorderless"//没有边界,圆形
android:text="@string/hello_world" />
可以修改背景颜色和水波纹的颜色:
<item name="colorControlHighlight">@color/colorPrimary_pink</item>//高亮颜色
<item name="colorButtonNormal">@color/material_blue_grey_800</item>//默认的颜色
最好使用AppcompatActivity
注意:如果是Button设置背景,原来的背景会被替换了。其他的控件可以设置背景。
2.Reveal Effect(揭露效果)
例子:Activity的揭露出现的效果。
ViewAnimationUtil工具类
// 圆形水波纹揭露效果
// ViewAnimationUtils.createCircularReveal(
// view, //作用在哪个View上面
// centerX, centerY, //扩散的中心点
// startRadius, //开始扩散初始半径
// endRadius)//扩散结束半径
Animator animator = ViewAnimationUtils.createCircularReveal(
bt1, bt1.getWidth() / 2, bt1.getHeight() / 2, 0,bt1.getHeight());
animator.setDuration(1000);
animator.setInterpolator(new AccelerateInterpolator());
animator.start();
3.Activity transition(Activity转场动画效果)
概念:
两个Activity进行跳转的时候,转场动画。
ActivityOptions类。只支持API21以上的版本。
版本判断会比较麻烦,谷歌很贴心 设计了一个兼容类:ActivityOptionsCompat(v4包中)但是此类在低版本上面并没有转场动画效果,只是解决了我们手动去判断版本的问题而已。
分类
转场动画可以分为两大类:共享元素转换和普通的转换
使用转换动画前提:需要给两个Activity都设置如下,让其允许使用转场动画。
方法一:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
方法二,修改主题:
<item name="android:windowContentTransitions">true</item>
1.共享元素转换
概念:可以把两个Activity当中的相同的元素关联起来做连贯的变换动画。
第一步:
给两个Activity当中的共享元素view都设置同一个名字:android:transitionName
<ImageView
android:id="@+id/iv_header"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/song"
android:transitionName="iv_header" />
按返回键的时候自动实现了返回的共享元素转场动画,原因看源码:
public void onBackPressed() {
finishAfterTransition();
}
public void finishAfterTransition() {
if (!mActivityTransitionState.startExitBackTransition(this)) {
finish();
}
}
第二步:通过ActivityOptionsCompat启动Activity:
(1)单个元素共享
// ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
// .makeSceneTransitionAnimation(
// activity, //当前的Activity
// sharedElement,//共享元素---哪一个View
// sharedElementName)//共享元素的名称
// android:transitionName="iv_meinv3"
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
.makeSceneTransitionAnimation(MDanimationActivity.this,
v, "iv_meinv3");
Intent intent = new Intent(MDanimationActivity.this,
MDanimationBActivity.class);
startActivity(intent, optionsCompat.toBundle());
(2)多个共享元素
//如何处理多个共享元素呢?
// new Pair<>(first, second)
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
.makeSceneTransitionAnimation(this, Pair.create((View)iv1, "iv1"),Pair.create((View)bt, "bt"));
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent, optionsCompat.toBundle());
2.普通的转换动画(只有API 21才有下面自带效果)
三种系统带的:滑动效果(Slide)、展开效果Explode、渐变显示隐藏效果Fade
// Slide slide = new Slide();
// slide.setDuration(300);
// getWindow().setExitTransition(slide);//出去的动画
// getWindow().setEnterTransition(slide);//进来的动画
// Explode explode = new Explode();
// explode.setDuration(1000);
// getWindow().setExitTransition(explode);//出去的动画
// getWindow().setEnterTransition(explode);//进来的动画
Fade fade = new Fade();
fade.setDuration(1000);
getWindow().setExitTransition(fade);//出去的动画
getWindow().setEnterTransition(fade);//进来的动画
//如果有共享元素,可以设置共享元素,那么它就会按照共享元素动画执行,其他的子view就会按照Fade动画执行。
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this);
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent, optionsCompat.toBundle());
4.Curved motion(曲线运动)
设计:view的平移旋转等效果结合Path、Interpolator插值器。
5.View State change (视图的状态改变)
例子:按下一个控件会有Z轴的阴影加深效果。