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);        
            }
        });
        
        
    }
}

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

posted @ 2014-10-03 08:04  似水v流年  阅读(807)  评论(1编辑  收藏  举报