android Shape及动画效果使用总结

善于归纳总结,才能更好的进步。我们在学习过程中应该不断的归纳总结,形成自己的知识体系,这样才是我们自己学到的东西,要不然一有不会的话就去Google、百度的话,这样知识永远不属于我们自己的。

一、shape使用总结

Shape的意思是形状,android中的shape可以定义控件的形状,样式。具体的用法是在res/drawable下面新建一个.xml文件,然后设置控件的样式即可。首先我们来看看shape中含有那些属性:

1、corners

corners代表圆角,什么意思呢?就是说有的时候我们要设置控件四周的圆角形状,这个时候我们就可以设置这个属性值。它有五个子属性值,分别代表整体的圆角半径,以及四周的圆角半径。不过其中要注意的是如果五个属性值都设置的话,那么“android:radius”这个属性值将不起作用。

1
2
3
4
5
6
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:radius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />

2、gradient

gradient代表渐变的意思,就是说对于它的颜色有种渐变的样式,我们还是来通过例子来具体说明比较好。

  1. startColor:渐变开始的颜色
  2. endColor: 渐变结束时的颜色
  3. angle: 渐变的角度,值为45°的倍数,0为从左向右渐变,90为从下到上渐变,逆时针渐变。
  4. type: 渐变的类型,默认linear,当选择为radial时需指定渐变半径gradientRadius
1
2
3
4
5
6
<gradient
android:angle="0"
android:endColor="#000000"
android:gradientRadius="100"
android:startColor="#ffffff"
android:type="radial" />

 type="radial"

  type="linear"

3、solid

颜色填充,代表控件被覆盖的颜色。只有一个属性值:android:color=”#42fd45”

1
2
<solid
android:color="#42fd45"/>

4、stroke

描边,啥意思呢?就是控件边缘的绘制。

  1. width:控件描边的宽度
  2. color:控件描边后的颜色
  3. dashWidth:表示“—”的宽度
  4. dashGap:表示两个“—”之间的距离,如果设置了

3、4两个属性的话就是一段虚线表示,不设置就是实体线。

1
2
3
4
5
<stroke
android:dashGap="3dp"
android:dashWidth="10dp"
android:width="10dp"
android:color="#000000" />

设置了3、4属性

没有设置3、4属性

以上就是shape主要用的属性,通过设置这些属性值,我们可以画我们想要的效果,这样做有啥好处呢?就是不需要通过图片来搞定控件的样式,这样就会减少apk包的大小。如果我们好好利用的话可以绘出我们想要的效果。


二、动画效果使用总结

1、动画类型

Android的animation由四种类型组成。

2、动画模式

Android中的动画模式主要分为两种,一种是渐变动画还有一种就是帧动画。

tweened animation(渐变动画)


frame by frame(画面转换动画)

3、动画解析

1、alpha xml 淡出效果
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500" />
</set>
<!--
fromAlpha:开始时透明度
toAlpha: 结束时透明度
duration:动画持续时间 -->
2、alpha xml 淡入效果
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="500" />
</set>
<!--
fromAlpha:开始时透明度
toAlpha: 结束时透明度
duration:动画持续时间 -->
3、rotate.xml 旋转效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="300"
android:toDegrees="-360"
android:pivotX="10%"
android:pivotY="100%"
android:duration="10000" />
</set>
<!--
fromDegrees 动画开始时的角度
toDegrees 动画结束时物件的旋转角度,正代表顺时针
pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置 -->
4、scale.xml 缩放效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator= "@android:anim/decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.5"
android:fromYScale="0.0"
android:toYScale="1.5"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:duration="10000"
android:repeatCount="1"
android:repeatMode="reverse" />
</set>
<!--
fromXDelta,fromYDelta
起始时X,Y座标,屏幕右下角的座标是X:320,Y:480
toXDelta, toYDelta
动画结束时X,Y的坐标
interpolator
指定动画插入器
常见的有加速减速插入器 accelerate_decelerate_interpolator
加速插入器
accelerate_interpolator,
减速插入器
decelerate_interpolator。
fromXScale,fromYScale,
动画开始前X,Y的缩放,0.0为不显示, 1.0为正常大小
toXScale,toYScale,
动画最终缩放的倍数, 1.0为正常大小,大于1.0放大
pivotX, pivotY
动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从屏幕中间开始
startOffset,
动画多次执行的间隔时间,如果只执行一次,执行前会暂停这段时间,单位毫秒
duration,
一次动画效果消耗的时间,单位毫秒,值越小动画速度越快
repeatCount,动画重复的计数,动画将会执行该值+1次
repeatMode,
动画重复的模式,
reverse
为反向,当第偶次执行时,动画方向会相反。
restart
为重新执行,方向不变
5、translate.xml 移动效果
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="320"
android:toXDelta="0"
android:fromYDelta="480"
android:toYDelta="0"
android:duration="10000" />
</set>
<!--
fromXDelta,fromYDelta 起始时X,Y座标,屏幕右下角的座标是X:320,Y:480
toXDelta, toYDelta 动画结束时X,Y的座标 -->

http://crazyandcoder.github.io/