Android 动画总结

Posted 暴走灬青春

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 动画总结相关的知识,希望对你有一定的参考价值。

1. (逐)帧动画

1.res右键->新建android Xml file,resource type选择帧动画Drawable,root element选择 第一个A:animation-list帧动画,file起个名字,
1-1:系统会自动在src目录下创建一个文件夹,名字是 drawable,xml文件 在此目录

2.<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<item android:drawable="@drawable/g1" android:duration="200"></item>
<item android:drawable="@drawable/g2" android:duration="200"></item>
<item android:drawable="@drawable/g3" android:duration="200"></item>
<item android:drawable="@drawable/g4" android:duration="200"></item>
<item android:drawable="@drawable/g5" android:duration="200"></item>
</animation-list>

3.android:oneshot=”true” 动画执行一次oneshot
4.在布局文件中 src引入此 xml文件,android:src=”@drawable/名字”
5.在代码中播放
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
//判断是否已经播放了
if (animationDrawable.isRunning())
//停止动画
animationDrawable.stop();

//重新开始播放
animationDrawable.start();

注: 动画播完了 实际上还在running 再点击播放没有反应
imageView.getDrawable()

6.没有在布局文件中关联xml资源,代码中关联
//给ImageView设置动画资源
imageView.setImageResource(R.drawable.frame_wifi);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
if (animationDrawable.isRunning())
animationDrawable.stop();

animationDrawable.start();

imageView.setImageResource(R.drawable.frame_wifi);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();

2. 补间动画(tween Animation)(渐变动画)

1.透明 通过编码的方式
`/*
* 下面的代码只能在Android4.1以下执行
*/
// //从完全透明(不可见)到不透明(可见)
// AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
// alphaAnimation.setDuration(5000);//设置动画的执行时长
// //把动画设置给ImageView
// imageView.setAnimation(alphaAnimation);
// //开始执行动画
// alphaAnimation.start();

/*
 * 以下代码全兼容
 */
// 从完全透明(不可见)到不透明(可见)
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(50);// 设置动画的执行时长
// 设置重复的次数(-1 代表无限循环)
alphaAnimation.setRepeatCount(Animation.INFINITE);
// 执行第二遍的时候从上一遍的末尾开始
alphaAnimation.setRepeatMode(Animation.REVERSE);
// 让iamgeView执行动画
imageView.startAnimation(alphaAnimation);`

通过动画文件(xml)的方式
在res/anim/创建补间动画资源文件(xml)
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0"
android:duration="1000"
android:repeatCount="1"//总共执行的次数要+1
android:fillAfter="true"//执行后维持状态不变
android:repeatMode="restart"
>
</alpha>

android:fillAfter=”true”//执行后维持状态不变

在代码中将动画资源文件转换为Animation动画,然后再使用
//把补间动画资源文件转换为Animation对象,然后再使用
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha_anim);
//让iamgeView执行动画
imageView.startAnimation(animation);

2.平移
`public void translate(View view)

    TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, -100, 200);

    translateAnimation.setDuration(5000);

    translateAnimation.setFillAfter(true);

    translateAnimation.setRepeatCount(Animation.INFINITE);

    translateAnimation.setRepeatMode(Animation.REVERSE);

    imageView.startAnimation(translateAnimation);
`

注: 1点击事件只会在原来 图片位置
2.整个布局leanarlayout 也是view 也可以设置动画

3.缩放动画
`public void scale(View view)

    ScaleAnimation scaleAnimation = new ScaleAnimation(1, 10, 1, 10, Animation.RELATIVE_TO_SELF, 0.4f, Animation.RELATIVE_TO_SELF, 0.3f);

    scaleAnimation.setDuration(1000);

    scaleAnimation.setRepeatCount(5);

    imageView.startAnimation(scaleAnimation);

`

4.旋转动画
`public void rotate(View view)
// 不倒翁效果
// RotateAnimation rotateAnimation = new RotateAnimation(-30, 30,
// Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1);
// 摆钟效果
// RotateAnimation rotateAnimation = new RotateAnimation(-30, 30,
// Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0);

    RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

    rotateAnimation.setDuration(100);

    rotateAnimation.setRepeatCount(Animation.INFINITE);

    rotateAnimation.setRepeatMode(Animation.RESTART);

    imageView.startAnimation(rotateAnimation);

`
  1. 动画集
    // 同时执行多个动画
    public void set(View view)
    ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f, 1.5f, 0.5f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    scaleAnimation.setDuration(5000);
    scaleAnimation.setRepeatCount(Animation.INFINITE);
    scaleAnimation.setRepeatMode(Animation.REVERSE);
    RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setDuration(5000);
    rotateAnimation.setRepeatCount(Animation.INFINITE);
    rotateAnimation.setRepeatMode(Animation.RESTART);
    //创建动画集
    AnimationSet animationSet = new AnimationSet(false);
    //添加动画
    animationSet.addAnimation(scaleAnimation);
    animationSet.addAnimation(rotateAnimation);
    imageView.startAnimation(animationSet);

3. 属性动画

  1. 透明 代码实现方式
    /*

      1. 参数1 要修改的目标控件对象
      1. 参数2:要修改这个控件的哪个参数呢?参数名传递进来
      1. 参数3:要修改的值,可变参数
        */
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView, “alpha”, 0,1);
        //设置延时
        objectAnimator.setDuration(2000);
        objectAnimator.setRepeatCount(ObjectAnimator.INFINITE);
        objectAnimator.setRepeatMode(ObjectAnimator.REVERSE);
        objectAnimator.start();

        • 布局文件实现方式animator
          `* 在res/animator/下创建动画资源(xml)

以上是关于Android 动画总结的主要内容,如果未能解决你的问题,请参考以下文章

android中的动画之变化动画事例2

在动画集结束时在 MonoTouch 中实现 CAKeyFrameAnimation 回调?

Android仿腾讯手机管家实现桌面悬浮窗小火箭发射的动画效果

Tween动画TranslateAnimation细节介绍

Tween动画TranslateAnimation细节介绍

Android 动画总结