极客学院Animation教程讲解的很详细,点击进入哦
这里为学习的整理和补充O(∩_∩)O
1. Animation类部分属性解析
- android:repeatMode 重复类型
reverse:先顺序执行,然后倒序回放
restart :重新播放一遍
** 注意:必须和repeatCount一起使用** - android:fillAfter
如果设置为 true,控件动画结束时,将保持动画最后时的状态 - android:fillBefore
如果设置为 true,控件动画结束时,还原到开始动画前的状态 - Interpolator 插值器点击此处跳转至学习教程
举个栗子:
android:interpolator="@android:anim/overshoot_interpolator"
Paste_Image.png
意义如下:
AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator 开始的时候向后然后向前甩
AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator 动画结束的时候弹起
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方快然后慢
LinearInterpolator 以常量速率改变
OvershootInterpolator 向前甩一定值后再回到原来位置
2. scale用法举例 ——缩放
- android:pivotX android:pivotY 缩放起点可以设置为:
n 当前控件左上角距离n
n% 当前控件左上角+当前空间宽度n%
n%p 当前控件的左上角加上父控件宽度的 n%
注意:左上角的位置是根据缩放后的位置而不断变化的
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="10000"
android:fillAfter="true"
android:fromXScale="0.4"
android:fromYScale="0.4"
android:pivotX="30%p"
android:pivotY="30%p"
android:repeatCount="1"
android:repeatMode="reverse"
android:toXScale="1.4"
android:toYScale="1.4"
/>
3. alpha用法举例——透明度
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="3000"
android:fillBefore="true"
/>
4. rotate用法举例——旋转
- pivotX pivotY
设置控件的旋转中心 - Degrees
正:顺时针方向度数 负:逆时针方向度数
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true"
android:fromDegrees="0"
android:pivotX="40%p"
android:pivotY="40%p"
android:toDegrees="360"
/>
5. translate用法举例——移动
- android:fromXDelta
设置起始点, X 轴坐标:n,n%,n%p,参考scale用法举例的描述
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="50%p"
android:toYDelta="50%p"
android:fillAfter="true"
/>
6. set用法举例——定义动作合集,各个动画一起执行的哦
- 在alpha等标签中声明duration、fillAfter是无效的,只有set标签中的duration有效
- android:shareInterpolator 默认为true
取 true 时,指在 AnimationSet 中定义一个插值器(interpolater),它下面的所有动画共同。如果设为 false,则表示它下面的动画自己定义各自的插值器
,并且会导致set中设置的android:interpolator="">无效
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="700"
android:fillAfter="true"
android:shareInterpolator="true"
android:interpolator="@android:anim/cycle_interpolator"
>
<alpha
android:fromAlpha="0.5"
android:toAlpha="1.0"
/>
<scale
android:fromXScale="0.4"
android:fromYScale="0.4"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.4"
android:toYScale="1.4"
/>
<rotate
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="260"
/>
</set>
在本例中,使用cycle_interpolator,执行完动画后,alpha=0.5,scale=0.4,degrees=0,位于动画开始后的初始状态,不是动画开始前的状态
*如果将 android:fillAfter="true"删除,执行完动画后,是动画开始前的状态 *
不明白的话,就动手试试吧O(∩_∩)O
7. 使用方式
- 在res/anim下建立xml文件
- 编辑该xml文件
- 在java中启动动画
```
loadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale);//获取动画
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view.startAnimation(loadAnimation); //开始动画
}});
####8.java代码中使用举例
AnimationSet animationSet=new AnimationSet(true);
AlphaAnimation alphaAnimation = new AlphaAnimation(0.5f, 1.0f);
ScaleAnimation scaleAnimation = new ScaleAnimation(0.4f, 1.4f, 0.4f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
RotateAnimation rotateAnimation = new RotateAnimation(0f, 260f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.setDuration(7000);
animationSet.setFillAfter(true);//20f 指动画执行的次数animationSet.setInterpolator(new CycleInterpolator(20f));
view.startAnimation(animationSet);
**后记:控件位置移动了,但是其本身的位置其实还是初始位置,可以通过设置点击事件感受一下,点击移动后的控件是没有反应的,点击该控件的原位置有反应**
*关于在java代码中具体如何使用这些属性,[点击此处,进入极客学院教程哦](http://wiki.jikexueyuan.com/project/android-animation/3.html)O(∩_∩)O~*
网友评论