原来一直对动画一知半解,只知道按照网上的方法会用就行了,但是自己写起来感觉确实有点费劲,今天终于研究了代码实现,一下子感觉清晰多了。先把总结如下,代码中有详细的注释。
动画分类
1.Peoperty Animation
这个动画是Android3.0之后推出的目前用处不大。
2.View Animation
这类动画也叫tween animation 主要分为 渐变动画(AlphaAnimation)旋转动画(RotateAnimation)
缩放动画(ScaleAnimation)位移动画(TranslateAnimation)
3.Drawable Animation
这类动画也叫帧动画 FrameAnimation
先上tween animation
MainActivity.java
package com.example.testanimation; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView imgView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgView = (ImageView)this.findViewById(R.id.imgView) ; Button btnAlpha = (Button)this.findViewById(R.id.btnAlpha) ; btnAlpha.setOnClickListener(new AnimationOnClickListener(AnimationType.alpha)); Button btnRotate = (Button)this.findViewById(R.id.btnRotate) ; btnRotate.setOnClickListener(new AnimationOnClickListener(AnimationType.rotate)); Button btnTraslate = (Button)this.findViewById(R.id.btnTraslate) ; btnTraslate.setOnClickListener(new AnimationOnClickListener(AnimationType.traslate)); Button btnScale = (Button)this.findViewById(R.id.btnScale) ; btnScale.setOnClickListener(new AnimationOnClickListener(AnimationType.scale)); Button btnComplex = (Button)this.findViewById(R.id.btnComplex) ; btnComplex.setOnClickListener(new AnimationOnClickListener(AnimationType.complex)); } enum AnimationType { alpha, rotate, traslate, scale, complex } class AnimationOnClickListener implements OnClickListener { private AnimationType mAnimationType; public AnimationOnClickListener (AnimationType animationType) { this.mAnimationType = animationType; } @Override public void onClick(View v) { switch (mAnimationType) { case alpha: /** * 透明度从不透明变为0.2透明度 */ AlphaAnimation _alphaAnimation = new AlphaAnimation(1.0f, 0.2f); _alphaAnimation.setDuration(200); _alphaAnimation.setFillAfter(true);//动画执行完的状态显示 imgView.startAnimation(_alphaAnimation); break; case rotate: /** * RotateAnimation 以图片中点为圆心旋转360度 * params: * pivotXType 中心点x坐标类型 RELATIVE_TO_SELF相对于自己,RELATIVE_TO_PARENT相对于父view * pivotYType 同上 * * pivotXValue,pivotYValue(圆心) * */ RotateAnimation _rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); _rotateAnimation.setDuration(3000); // _rotateAnimation.setRepeatMode(Animation.REVERSE); imgView.startAnimation(_rotateAnimation); break; case traslate: /** * 按照图片的宽高2倍的位移移动 */ TranslateAnimation _translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f); _translateAnimation.setDuration(3000); _translateAnimation.setFillAfter(true); imgView.startAnimation(_translateAnimation); break; case scale: /** * ScaleAnimation 以图片左上角为静止点,按照1.5倍尺寸放大 * params: * pivotXType 中心点x坐标类型 RELATIVE_TO_SELF相对于自己,RELATIVE_TO_PARENT相对于父view * pivotYType 同上 * pivotXValue,pivotYValue(静止点) */ ScaleAnimation _scaleAnimation = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_SELF, 0f); _scaleAnimation.setDuration(300); _scaleAnimation.setZAdjustment(Animation.ZORDER_TOP); _scaleAnimation.setRepeatCount(1); _scaleAnimation.setRepeatMode(Animation.REVERSE);//必须设置setRepeatCount此设置才生效,动画执行完成之后按照逆方式动画返回 imgView.startAnimation(_scaleAnimation); break; case complex: AnimationSet _animationSet = new AnimationSet(false); AlphaAnimation _alphaAnimation2 = new AlphaAnimation(1.0f, 0.2f); _alphaAnimation2.setDuration(1000); _alphaAnimation2.setRepeatCount(1); _alphaAnimation2.setRepeatMode(Animation.REVERSE); // _alphaAnimation2.setFillAfter(true);//设此地方不好使,必须设置到AnimationSet中 TranslateAnimation _translateAnimation2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f); _translateAnimation2.setDuration(1000); _translateAnimation2.setRepeatCount(1); _translateAnimation2.setRepeatMode(Animation.REVERSE); // _translateAnimation2.setFillAfter(true); _animationSet.addAnimation(_alphaAnimation2); _animationSet.addAnimation(_translateAnimation2); _animationSet.setFillAfter(true); // _animationSet.setRepeatCount(1); // _animationSet.setRepeatMode(Animation.REVERSE);//这两个属性设此地不好使,必须单个设置 imgView.startAnimation(_animationSet); break; default: break; } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
activity_main.xml
<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:id="@+id/imgView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <Button android:id="@+id/btnAlpha" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="alpha" /> <Button android:id="@+id/btnRotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="rotate" /> <Button android:id="@+id/btnTraslate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="traslate" /> <Button android:id="@+id/btnScale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="scale" /> <Button android:id="@+id/btnComplex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="animationSet" /> </LinearLayout>
下面为frame animation
public class FrameAnimationAcitvity extends Activity { private ImageView imageView; private AnimationDrawable ad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.animation_list); Button button=(Button)findViewById(R.id.button1); imageView=(ImageView)findViewById(R.id.imageView1); imageView.setBackgroundResource(R.drawable.framedrawable); ad=(AnimationDrawable)imageView.getBackground(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ad.start(); } }); } }
framedrawable.xml
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/grid_liushui" android:duration="200"/> <item android:drawable="@drawable/grid_payout" android:duration="200"/> <item android:drawable="@drawable/grid_report" android:duration="200"/> </animation-list></span>
附上tween动画的源码下载链接
http://download.csdn.net/detail/duanyu218/7449471
android动画-动画分类及代码示例
时间: 2024-10-20 08:38:50