视图状态改变是通过StateListAnimator动画集来改变View的状态的,它可以使View在不同状态下发生不同的变化,如下是在drawable目录下定义一个StateListAnimator:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true">
  4. <set>
  5. <objectAnimator android:propertyName="translationZ"
  6. android:duration="@android:integer/config_shortAnimTime"
  7. android:valueTo="10"
  8. android:valueType="floatType"/>
  9. </set>
  10. </item>
  11. <item android:state_pressed="false">
  12. <set>
  13. <objectAnimator android:propertyName="translationZ"
  14. android:duration="@android:integer/config_shortAnimTime"
  15. android:valueTo="0"
  16. android:valueType="floatType"/>
  17. </set>
  18. </item>
  19. </selector>

上述动画是定义了在视图按下时候,视图往Z轴正方向提升,松开时候又恢复到原始位置,然后把该StateListAnimator设置给对应的View即可:android:stateListAnimator=""


设置StateListAnimator有两种方式:

1、通过xml设置:

设置android:stateListAnimator=“”

  1. <android.support.v7.widget.CardView
  2. android:layout_width="match_parent"
  3. android:layout_height="80dp"
  4. android:layout_margin="16dp"
  5. android:clickable="true"
  6. android:stateListAnimator="@drawable/style3"
  7. app:cardCornerRadius="2dp"
  8. app:cardElevation="2dp"
  9. app:cardUseCompatPadding="false" />

2、通过代码设置:

  1. StateListAnimator listAnimator = AnimatorInflater.loadStateListAnimator(this, R.drawable.list_animator);
  2. mView.setStateListAnimator(listAnimator);

如下是个Demo:

第一个动画的StateListAnimator

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true">
  4. <set>
  5. <objectAnimator android:propertyName="translationZ"
  6. android:duration="@android:integer/config_shortAnimTime"
  7. android:valueTo="10"
  8. android:valueType="floatType"/>
  9. <objectAnimator android:propertyName="rotationX"
  10. android:duration="@android:integer/config_shortAnimTime"
  11. android:valueTo="45"
  12. android:valueType="floatType"/>
  13. </set>
  14. </item>
  15. <item android:state_pressed="false">
  16. <set>
  17. <objectAnimator android:propertyName="translationZ"
  18. android:duration="@android:integer/config_shortAnimTime"
  19. android:valueTo="0"
  20. android:valueType="floatType"/>
  21. <objectAnimator android:propertyName="rotationX"
  22. android:duration="@android:integer/config_shortAnimTime"
  23. android:valueTo="0"
  24. android:valueType="floatType"/>
  25. </set>
  26. </item>
  27. </selector>

第二个动画的StateListAnimator

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true">
  4. <set>
  5. <objectAnimator android:propertyName="translationZ"
  6. android:duration="@android:integer/config_shortAnimTime"
  7. android:valueTo="10"
  8. android:valueType="floatType"/>
  9. </set>
  10. </item>
  11. <item android:state_pressed="false">
  12. <set>
  13. <objectAnimator android:propertyName="translationZ"
  14. android:duration="@android:integer/config_shortAnimTime"
  15. android:valueTo="0"
  16. android:valueType="floatType"/>
  17. </set>
  18. </item>
  19. </selector>

第三个动画的StateListAnimator

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true">
  4. <set>
  5. <objectAnimator android:propertyName="rotationX"
  6. android:duration="@android:integer/config_shortAnimTime"
  7. android:valueTo="360"
  8. android:valueType="floatType"/>
  9. </set>
  10. </item>
  11. <item android:state_pressed="false">
  12. <set>
  13. <objectAnimator android:propertyName="rotationX"
  14. android:duration="@android:integer/config_shortAnimTime"
  15. android:valueTo="0"
  16. android:valueType="floatType"/>
  17. </set>
  18. </item>
  19. </selector>

Material Design之视图状态改变的更多相关文章

  1. Android Material Design简单使用

    吐槽 作为一个 Android developer,没有什么比拿着 UI 设计的一堆 iOS 风格的设计 来做需求更恶心的了,基本所有空间都要照着 iOS 来画一遍,Material Design 辣 ...

  2. 值得一看!2018年最优秀的9个Android Material Design Apps!

    今年4月,谷歌Gmail推出了全新的设计外观,全新的配色方案,更多的空白区域和精致的图标.也带来了Material Design 的一些改变 – Material Theming (材料主题),旨在自 ...

  3. [转]ANDROID L——Material Design详解(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 转自:http://blog.csdn.net/a396901990/article/de ...

  4. [转]Android 5.0——Material Design详解(动画篇)

    Material Design:Google推出的一个全新的设计语言,它的特点就是拟物扁平化. Material Design包含了很多内容,今天跟大家分享一下Material新增的动画: 在Andr ...

  5. 创建Material Design风格Android应用--自定义阴影和裁剪视图

    之前已经写过通过应用主题和使用ListView, CardView,应用Material Design样式,同一时候都都能够通过support library向下兼容.今天要写的阴影和视图裁剪.无法向 ...

  6. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  7. Material Design系列第六篇——Defining Custom Animations

    Defining Custom Animations //自定义动画 This lesson teaches you to //本节课知识点 Customize Touch Feedback //1. ...

  8. ANDROID L——Material Design具体解释(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  9. Material Design Animation

    Material Design Animation Authentic motion 真实的运动 运动以一种优美流动的形式描述了空间关系,功能和目的. Mass and weight: 质量和重量 在 ...

随机推荐

  1. Swift中的可选协议和方法的历史渊源

    @objc protocol Transaction { func commit() -> Bool optional func isComplete() -> Bool } 以上协议被标 ...

  2. 在一维坐标轴上有n个区间段,求重合区间最长的两个区间段。

    //重叠区间数 #define N 2 typedef struct arrange { int x; int y; } Arrange; //先按左边界排序,若相等再按右边界排序(升序) int c ...

  3. Linux 高性能服务器编程——高级I/O函数

    重定向dup和dup2函数 #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor_o ...

  4. Servlet - 基础

    Servlet 标签 : Java与Web HTTP协议 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器(Browser)和万维网服务 ...

  5. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  6. 重读COM技术内幕(inside com)有感

    重读COM技术内幕(inside com)有感 面向对象设计哲学在复杂领域并不能很好地解决问题.参考(http://www.richardlord.net/blog/what-is-an-entity ...

  7. Oracle AP Invoice APIs

     These APIs are handful when you want to do Insert, Update or Delete programmatically for some bus ...

  8. System.getProperty()的用途

     偶尔用到 System.getProperty(),找起来也不方便.这里做下记录备忘: 编写的测试类: public class TestSystemproperty { public stat ...

  9. android问题:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/24196143 Installation error: INSTALL_FAILED_C ...

  10. Spark技术内幕:一个图搞定Spark到底有多少行代码

    Spark1.0.0发布一个多月了,那么它有多少行代码(Line of Code, LOC)? 注:代码统计未包含测试,sample.