RippleDrawable 的简单使用
2015-12-23 23:38
281 查看
RippleDrawable 就是一个自定义触摸反馈动画。是在 Android 5.0 时推出的动画效果。为了兼容低版本,可以在将 <ripple> 元素定义在 drawable-v21 目录下;
效果如下:
首先定义一个 StateListDrawable 资源;
button_default.xml :
需要注意 <selector> 时有序的。Android在遍历烈表时,会返回第一个状态完全匹配的 Drawable 。所以将常规状态放在烈表的最底部。
使用一些动画触摸反馈修饰按钮示例。使用 <ripple> 元素定义 XML (在 drawable-v21目录下),可用于构造 RippleDrawable;
background_button.xml :
增加尺寸的缩放效果(res/animator 目录下);
button_press.xml :
虽然 XML 结构使用和前面的 button_default.xml 相同的 <seletor>,但是在 res/animator 目录下,表示动画器实例而非 Drawable 的状态列表集合。
content_main.xml :
效果如下:
首先定义一个 StateListDrawable 资源;
button_default.xml :
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/disabled" /> <item android:state_pressed="true" android:drawable="@drawable/selected" /> <item android:state_focused="true" android:drawable="@drawable/selected" /> <item android:drawable="@drawable/fdefault" /> </selector>
需要注意 <selector> 时有序的。Android在遍历烈表时,会返回第一个状态完全匹配的 Drawable 。所以将常规状态放在烈表的最底部。
使用一些动画触摸反馈修饰按钮示例。使用 <ripple> 元素定义 XML (在 drawable-v21目录下),可用于构造 RippleDrawable;
background_button.xml :
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#0CC"> <!--显示默认的 drawable--> <item android:drawable="@drawable/button_default" /> <!--匹配默认值的波纹效果剪切遮罩--> <item android:id="@android:id/mask" android:drawable="@drawable/button_default" /> </ripple>
增加尺寸的缩放效果(res/animator 目录下);
button_press.xml :
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <set android:ordering="together"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="scaleX" android:valueTo="0.8" android:valueType="floatType" /> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="scaleY" android:valueTo="0.8" android:valueType="floatType" /> </set> </item> <item> <set android:ordering="together"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="scaleX" android:valueTo="1.0" android:valueType="floatType" /> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="scaleY" android:valueTo="1.0" android:valueType="floatType" /> </set> </item> </selector>
虽然 XML 结构使用和前面的 button_default.xml 相同的 <seletor>,但是在 res/animator 目录下,表示动画器实例而非 Drawable 的状态列表集合。
content_main.xml :
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.crazy.bitmapxfermode.MainActivity" tools:showIn="@layout/activity_main"> <Button android:text="My Button" android:background="@drawable/background_button" android:stateListAnimator="@animator/button_press" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
相关文章推荐
- Servlet之过滤器
- 解决方法:64位系统-未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- MySQL复制 -- binlog(2)
- hdu 4638 Group 莫队算法
- c#面试题
- 修改lenet网络进行训练(一)
- [转]一步步使用3Dmax+Photoshop为游戏关卡设计瓦片化3D模型和无缝贴图(视频教程)
- c#面试题
- 6.数据挖掘概念笔记——挖掘频繁模式、关联和相关性术
- Codeforces Round #297 (Div. 2) 525C Ilya and Sticks(脑洞)
- Java学习笔记(1):1.概述之计算机语言概述
- 5.数据挖掘概念笔记——数据立方体技术
- easyui form表单ajax提交后,返回数据处理
- 时间解析
- 4.数据挖掘概念笔记——数据仓库与OLAP
- 待完成任务(一) 利用自己的数据集 利用lenet网络进行训练
- C - Ping pong hdu2492
- Yii2-admin RBAC权限管理的实现
- 如何写好一篇产品测评报告
- 3.数据挖掘概念笔记——数据预处理