MaterialDesign动画

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轴的阴影加深效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值