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); } }); } }
显示效果如下,旋转中透明度增加,放大了图片并平移了位置