Animation

1.安卓动画分为两种:Tween动画和Frame动画
  Tween动画可以实现对View的内容移动、缩放、旋转以及渐变等效果
  Frame动画则提供了一种逐帧播放图片的动画方式。

2.Tween动画文件保存在res/anim/目录下,与之关联的是R.anim
  Frame动画文件保存在res/drawable目录下,与之关联的是R.drawable

3.Tween动画
  渐变动画  <alpha>  AlphaAnimation
  缩放动画  <scale>  ScaleAnimation
  移动动画  <translate>  TranslateAnimation
  旋转动画  <rotate>  RotateAnimation

  1) 渐变动画
  定义动画文件:alpha.xml
  步骤:新建Android XML File --> Resource Type选择Tween Animation,Root Element选择alpha,填写文件名alpha,完成。

  这时在res目录下自动生成anim文件夹目录,目录下有alpha.xml文件

  <?xml version="1.0" encoding="utf-8"?>
  <alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromAlpha="1"
    android:toAlpha="0" >

  </alpha>

  上面动画文件定义了3秒内内容由完全展示到消失

  编写代码:MainActivity   主要有两步:加载动画 --- 执行动画

	// 1.加载动画
	Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
	// 设置动画保持执行后效果
	animation.setFillAfter(true);

	// 2.控件执行动画
	iv.startAnimation(animation);

  2) 缩放动画
  动画文件:scale.xml

  <?xml version="1.0" encoding="utf-8"?>
  <scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="2"
    android:toYScale="4" >

  </scale>

  上面动画文件定义了3秒内以中心点为中心,x轴扩大1倍,y轴扩大2倍。


  3) 移动动画

  android:fromXDelta
  android:fromYDelta
  android:toXDelta
  android:toYDelta
  这四个属性控制移动的位置,它们的值有3种情况:
  float数值:5  代表移动5px
  x%:代表移动自身的x%
  x%p:代表移动父窗体的x%
  
  动画文件:translate.xml

  <translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="50%p"
    android:toYDelta="50%" >

  </translate>

  上面动画文件定义了3秒内x轴移动父窗体的50%,y轴移动自身的50%。


  4) 旋转动画
  动画文件:rotate.xml

  <rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="90" >

  </rotate>

  上面动画文件定义了3秒内以中心点为中心,旋转90度。


  5) 动画插入器
  可以给动画添加属性:android:interpolator,即动画插入器。
  安卓提供了很多动画插入器,例如:android:interpolator="@android:anim/accelerate_interpolator" 是加速插入器
  一般用到的有:加速 减速 先加速后减速 先减速后加速  周期
  例:

  <rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromDegrees="0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="90" >

  </rotate>

  6) 使用代码编写动画
  可以直接使用代码生成动画,使用的对应类见3。

	// 1.加载动画
	// 缩放动画
	ScaleAnimation animation = new ScaleAnimation(0, 1, 0, 2);
	animation.setDuration(3000);
	// 设置动画保持执行后效果
	animation.setFillAfter(true);

	// 2.控件执行动画
	iv.startAnimation(animation);

  7) 动画组合使用 --- <set>
  多种动画可以组合使用,它们用<set>包裹起来。

  <set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
  </set>

  上面是安卓文档提供的组合动画


  8) 输入框抖动

  动画shake.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXDelta="0"
    android:interpolator="@anim/cycle_7"
    android:toXDelta="10" />

  抖动周期:/res/anim/cycle_7.xml

<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:cycles="7" />

 布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="shake"
        android:text="抖动" />

</LinearLayout>

代码:

	public void shake(View v) {

		// 1.加载动画
		Animation animation = AnimationUtils.loadAnimation(this, R.anim.shake);

		// 2.执行动画
		et.startAnimation(animation);

	}


4.Frame动画
  Frame动画是将很多图片逐帧播放。
  核心类:AnimationDrawable


  步骤:
  1) 将需要切换的所有图片放到drawable对应分辨率的目录下。
  2) 在/res目录下创建动画资源:
     新建Android XML File --> Resource Type选择Drawable,Root Element选择animation-list,填写文件名frame,完成。
     这时在res目录下自动生成drawable文件夹目录,目录下有frame.xml文件
  3) 完成frame.xml

     <?xml version="1.0" encoding="utf-8"?>
     <animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

	    <item
		android:drawable="@drawable/a1"
		android:duration="1000"/>

		....
     </animation-list>

   4) 给ImageView设置背景资源
      帧动画是背景资源,所有要给ImageView设置背景,有两种方法
      在布局文件xml中<ImageView>设置属性android:background="@drawable/frame"
      或者在代码中:iv.setBackgroundResource(R.drawable.frame);

   5) 在代码中添加动画 --- 核心

	//得到动画
	AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground();
	//开始动画
	animationDrawable.start();

	//停止动画
	animationDrawable.stop();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值