美文网首页Android知识Android开发Android开发
动画起始->alpha、scale、translate、r

动画起始->alpha、scale、translate、r

作者: crossroads | 来源:发表于2016-12-13 18:45 被阅读511次
极客学院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. 使用方式

  1. 在res/anim下建立xml文件
  2. 编辑该xml文件
  3. 在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~*

相关文章

网友评论

    本文标题:动画起始->alpha、scale、translate、r

    本文链接:https://www.haomeiwen.com/subject/ljovmttx.html