首页 > 代码库 > android 自定义动画

android 自定义动画

android中主要有两种动画模式,一种是tweened animation(渐变动画),包含了4种动画类型,alpha(透明度)、scale(尺寸缩放)、translate(位置变换)、rotate(图形旋转),第二种是frame by frame (帧动画),就是逐帧播放设置好的动画

我们看下第一种动画的实现

第一步,定义好动画的xml文件,在res/anim下新建myanim.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <!-- 透明度变换| 开始透明度为10%| 目标透明度为100% |时间为2秒 -->    <alpha         android:fromAlpha="0.1"     android:toAlpha="1.0"     android:duration="2000"     />    <!-- 缩放动画 | 开始X和Y都为0|动画结束时放大到140%|pivotX与pivotY设置动画相对于自身的位置|fillAfter表示播放完成后是否 被应用-->    <scale         android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:fromXScale="0.0"        android:toXScale="1.4"        android:fromYScale="0.0"        android:toYScale="1.4"        android:pivotX="50%"        android:pivotY="50%"        android:fillAfter="false"        android:duration="3000"        />    <!-- 位置变换 |起始X和为Y都为30 | 结束X为0,Y为50,也就是会向左下方向移动|时间为3秒 -->    <translate         android:fromXDelta="30"        android:toXDelta="0"        android:fromYDelta="30"        android:toYDelta="50"        android:duration="3000"        />    <!-- 旋转动画 |从0度开始 ,结束角度为350,动画相对于自身位置为50%,时间为3秒-->    <rotate         android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:fromDegrees="0"        android:toDegrees="+350"        android:pivotX="50%"        android:pivotY="50%"        android:duration="3000"        /></set>

然后在activity_main.xml 新增加一个图片和按钮,按钮用来启动动画

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/RelativeLayout1"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.ssln.animation.MainActivity" >    <ImageView        android:id="@+id/myImageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_centerHorizontal="true"        android:layout_gravity="center_horizontal"        android:src="@drawable/img" />    <Button        android:id="@+id/butStart"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/myImageView"        android:layout_alignParentBottom="true"        android:text="开始动画" /></RelativeLayout>

最后,在MainActivity.java中添加代码

package com.ssln.animation;  import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends ActionBarActivity {    Animation myAnim;    //动画    ImageView myImg;    //图像    Button      myBtn;    //开始按钮        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                //加载动画        myAnim=AnimationUtils.loadAnimation(this, R.anim.myanim);        //查找图片        myImg=(ImageView)findViewById(R.id.myImageView);        //查走按钮        myBtn=(Button)findViewById(R.id.butStart);                        myBtn.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                //启动动画                myImg.startAnimation(myAnim);                    }        });                    }}

显示效果如下,旋转中透明度增加,放大了图片并平移了位置

android 自定义动画