Anim Set属性
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
Set 属性
shareInterpolator true时,interpolator应用到所有子元素中。
-->
<!--
公共属性
detachWallpaper 是否在壁纸上运行,设置了壁纸背景的窗口动画(window animation)才有效。
设为true,则动画只在窗口运行,壁纸背景保持不变。
fillEnabled true时,fillBefore的值才有效,否则fillBefore会被忽略。
fillBefore true时,动画执行完后,View会还原动画执行前的初始状态;否则不会,默认即为true。
repeatCount 动画重复执行的次数,默认为0,不重复;-1或infinite,无限重复。
repeatMode 动画重复执行的模式,默认restart 动画重复执行时从起点开始;reverse 动画会反方向执行。
startOffset 动画执行之前的等待时间,毫秒为单位;重复执行时,每次执行前同样执行等待时间。
zAdjustment 动画的内容在动画运行时在z轴上的位置:
normal 默认值,在z轴上
top 在z轴最上层
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#FFFFFFFF" />
<item android:state_focused="true" android:color="#FFFFFFFF" />
<item android:state_pressed="true" android:color="#FFFFFFFF" />
<item android:color="#FF000000" />
</selector> bottom 在z轴最下层
interpolator 动画速率的变化
-->
<!--
alpha 渐变动画
对应的 AlphaAnimation
AlphaAnimation alpha = (AlphaAnimation) AnimationUtils.loadAnimation(this, R.anim.alpha);
view.startAnimation(alpha);
duration 动画持续时间
fromAlpha 动画开始时透明度,默认值1.0,最小值0.0
toAlpha 动画结束时透明度,默认值1.0,最小值0.0
-->
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
<!--
scale 缩放动画
对应的 ScaleAnimation
ScaleAnimation scale = (ScaleAnimation) AnimationUtils.loadAnimation(this, R.anim.scale);
view.startAnimation(scale);
duration 动画持续时间
fromXScale 动画开始时,x轴上(宽度)的缩放比例。0.0为没有大小,1.0为正常大小,大于1.0为放大,小于1.0为缩小。
fromYScale 动画开始时,y轴上(高度)的缩放比例。0.0为没有大小,1.0为正常大小,大于1.0为放大,小于1.0为缩小。
toXScale 动画结束时,x轴上(宽度)的缩放比例。0.0为没有大小,1.0为正常大小,大于1.0为放大,小于1.0为缩小。
toYScale 动画结束时,y轴上(高度)的缩放比例。0.0为没有大小,1.0为正常大小,大于1.0为放大,小于1.0为缩小。
pivotX 缩放时的固定不变的x坐标,0%为最左边,100%为最右边。
pivotY 缩放时的固定不变的y坐标,0%为最顶部,100%为最底部。
-->
<scale
android:duration="500"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="0%"
android:pivotY="100%"
android:toXScale="1.0"
android:toYScale="1.0" />
<!--
translate 平移动画
对应的 TranslateAnimation
TranslateAnimation translate = (TranslateAnimation) AnimationUtils.loadAnimation(this, R.anim.translate);
view.startAnimation(translate);
duration 动画持续时间
fromXDelta 起始位置的X坐标的偏移量
fromYDelta 结束位置的X坐标的偏移量
toXDelta 起始位置的Y坐标的偏移量
toYDelta 结束位置的Y坐标的偏移量
1.-100到100,以"%"结束,表示相对于View本身的百分比位置;-100%表示控件左边或者上边,100%表示控件右边或者下边
2.以"%p"(parent)结束,表示相对于View的父View的百分比位置;
3.没有任何后缀,表示相对于View本身具体的像素值
-->
<translate
android:duration="500"
android:fromXDelta="100%"
android:fromYDelta="-100%"
android:toXDelta="-100%"
android:toYDelta="100%" />
<!--
rotate 旋转动画
对应的 RotateAnimation
RotateAnimation rotate = (RotateAnimation) AnimationUtils.loadAnimation(this, R.anim.rotate);
view.startAnimation(rotate);
duration 动画持续时间
fromDegrees 旋转开始的角度
toDegrees 旋转结束的角度
pivotX 旋转中心点的X坐标,纯数字表示相对于View本身左边缘的像素偏移量;
带"%"后缀时表示相对于View本身左边缘的百分比偏移量;带"%p"后缀时表示相对于父View左边缘的百分比偏移量
pivotY 旋转中心点的Y坐标,纯数字表示相对于View本身顶部边缘的像素偏移量;
带"%"后缀时表示相对于View本身顶部边缘的百分比偏移量;带"%p"后缀时表示相对于父View顶部边缘的百分比偏移量
-->
<rotate
android:duration="500"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
</set>
Animi interpolator
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
加速度设置
<动画标签
android:interpolator="@资源id"/>
-->
<!--
对应的类 AccelerateDecelerateInterpolator
对应的资源 @android:anim/accelerate_decelerate_interpolator
作用 动画开始与结束时速率改变比较慢,在中间时加速
-->
<accelerateDecelerateInterpolator />
<!--
对应的类 AccelerateInterpolator
对应的资源 @android:anim/accelerate_interpolator
作用 动画开始时速率改变比较慢,然后开始加速
factor 加速速率,默认值1.0。
-->
<accelerateInterpolator android:factor="1" />
<!--
对应的类 AnticipateInterpolator
对应的资源 @android:anim/anticipate_interpolator
作用 动画开始的时候向后然后往前抛
tension 向后的拉力,默认值2.0;0.0时,不会有向后的动画
-->
<anticipateInterpolator android:tension="2" />
<!--
对应的类 AnticipateOvershootInterpolator
对应的资源 @android:anim/anticipate_overshoot_interpolator
作用 动画开始的时候向后抛,然后再向前抛;会抛超过目标值后再返回到最后的值
-->
<anticipateOvershootInterpolator
android:extraTension="2"
android:tension="2" />
<!--
对应的类 BounceInterpolator
对应的资源 @android:anim/bounce_interpolator
作用 动画结束的时候会弹跳
-->
<bounceInterpolator />
<!--
对应的类 CycleInterpolator
对应的资源 @android:anim/bounce_interpolator
作用 动画循环做周期运动,速率改变沿着正弦曲线
cycles 循环次数,默认值1
-->
<cycleInterpolator android:cycles="1" />
<!--
对应的类 DecelerateInterpolator
对应的资源 @android:anim/decelerate_interpolator
作用 动画开始时速率改变比较快,然后开始减速线
factor 减速速率,默认为1.0
-->
<decelerateInterpolator android:factor="1" />
<!--
对应的类 LinearInterpolator
对应的资源 @android:anim/decelerate_interpolator
作用 动画匀速播放,没有可更改设置的属性
-->
<linearInterpolator />
<!--
对应的类 OvershootInterpolator
对应的资源 @android:anim/overshoot_interpolator
作用 动画向前抛,抛超过最后值,然后才返回
tension 超出后的拉力,默认为2.0
-->
<overshootInterpolator android:tension="2" />
</set>
Anim animation-list实现帧动画
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- oneshot="true"表示只展示一遍,oneshot="false"表示不停止的循环展示
android:duration 表示展示所用的该图片的时间长度 -->
<item
android:drawable="@mipmap/up"
android:duration="500" />
<item
android:drawable="@mipmap/down"
android:duration="500" />
</animation-list>
Anim 从左淡入
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
-->
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="400"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="400" />
</set>
Anim 从左淡出
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
-->
<translate android:fromXDelta="0" android:toXDelta="-50%p"
android:duration="400"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="400" />
</set>
Anim 从右淡入
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
-->
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="400"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@integer/config_mediumAnimTime" />
</set>
Anim 从右淡出
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
-->
<translate android:fromXDelta="0" android:toXDelta="50%p"
android:duration="400"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="400" />
</set>
Drawable shape属性
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- android:shape:
rectangle 矩形
oval 椭圆形
line 线性形状
ring 环形
-->
<!-- 圆角
radius 四角半径
bottomLeftRadius 左下角半径
bottomRightRadius 右下角半径
topLeftRadius 左上角半径
topRightRadius 右上角半径
-->
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:radius="12dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
<!-- 渐变
startColor 起始颜色
endColor 结束颜色
angle 方向角度。当angle=0时,渐变色是从左向右;逆时针方向转,当angle=90时为从下往上。
gradientRadius 渐变色半径(当 android:type="radial" 时才使用。单独使用 android:type="radial"会报错)
type 渐变类型:
linear 线性渐变,默认设置
radial 放射性渐变,以开始色为中心。
sweep 扫描线式的渐变。
useLevel(如果要使用LevelListDrawable对象):
true无渐变色
false有渐变色
centerX 渐变中心X点坐标的相对位置
centerY 渐变中心Y点坐标的相对位置
-->
<gradient
android:angle="90"
android:centerColor="@android:color/black"
android:centerX="0"
android:centerY="0"
android:endColor="@android:color/black"
android:gradientRadius="90"
android:startColor="@android:color/white"
android:type="radial"
android:useLevel="true" />
<!-- 内间距 -->
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
<!-- 大小 -->
<size
android:width="60dp"
android:height="60dp" />
<!-- 填充 -->
<solid android:color="@android:color/white" />
<!-- 描边
dashGap 虚线的宽度
dashWidth 间隔宽度
-->
<stroke
android:width="1dp"
android:color="@android:color/black"
android:dashGap="1dp"
android:dashWidth="1dp" />
</shape>
Drawable selector属性
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 点击时 -->
<item android:state_pressed="true" android:drawable="@mipmap/pressed"/>
<!-- 选中时 -->
<item android:state_selected="true" android:drawable="@mipmap/pressed"/>
<!-- 获得焦点时 -->
<item android:state_focused="true" android:drawable="@mipmap/pressed"/>
<!-- 失去焦点时 -->
<item android:state_focused="false" android:drawable="@mipmap/pressed"/>
<!-- 不可用时 -->
<item android:state_enabled="false" android:drawable="@mipmap/disabled"/>
<!-- 可用时 -->
<item android:state_enabled="true" android:drawable="@mipmap/enabled"/>
<!-- 正常时 -->
<item android:drawable="@mipmap/normal"/>
</selector>
Drawable selector+shape混搭
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape>
<solid android:color="#ff38b8c1" />
<corners android:radius="4px"></corners>
<padding android:bottom="5dp" android:left="10dp" android:right="10dp" android:top="5dp" />
</shape>
</item>
<item android:state_checked="true">
<shape>
<solid android:color="#ff38b8c1" />
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#FFFFFFFF" />
<item android:state_focused="true" android:color="#FFFFFFFF" />
<item android:state_pressed="true" android:color="#FFFFFFFF" />
<item android:color="#FF000000" />
</selector> <corners android:radius="4px"></corners>
<padding android:bottom="5dp" android:left="10dp" android:right="10dp" android:top="5dp" />
</shape>
</item>
<item android:state_pressed="true">
<shape>
<solid android:color="#ff38b8c1" />
<corners android:radius="4px"></corners>
<padding android:bottom="5dp" android:left="10dp" android:right="10dp" android:top="5dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="#00000000" />
<corners android:radius="4px"></corners>
<padding android:bottom="5dp" android:left="10dp" android:right="10dp" android:top="5dp" />
</shape>
</item>
</selector>
Drawable selector通用模板
上述的情况颇多,一般用这个模板都能实现大部分需求。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 点击时 -->
<item android:state_pressed="true" android:drawable="@mipmap/pressed"/>
<!-- 选中时 -->
<item android:state_selected="true" android:drawable="@mipmap/pressed"/>
<!-- 获得焦点时 -->
<item android:state_focused="true" android:drawable="@mipmap/pressed"/>
<!-- 正常时 -->
<item android:drawable="@mipmap/normal"/>
</selector>
Drawable layer-list 边框 底框不绘制
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="-2dp">
<shape>
<corners
android:topLeftRadius="2dp"
android:topRightRadius="2dp" />
<solid android:color="#ffffffff" />
<stroke
android:width="0.5dp"
android:color="@color/blue" />
</shape>
</item>
</layer-list>
Color selector通用模板
color的selector属性和drawable的seletor属性是一样的,可以说只是从使用角度区分了selector。本质上,所有的selector都是一样的。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#FFFFFFFF" />
<item android:state_focused="true" android:color="#FFFFFFFF" />
<item android:state_pressed="true" android:color="#FFFFFFFF" />
<item android:color="#FF000000" />
</selector>