当前位置: 代码迷 >> Android >> android卡通-代码实现,终于清晰各个参数意思了
  详细解决方案

android卡通-代码实现,终于清晰各个参数意思了

热度:69   发布时间:2016-04-28 05:22:02.0
android动画-代码实现,终于清晰各个参数意思了

原来一直对动画一知半解,只知道按照网上的方法会用就行了,但是自己写起来感觉确实有点费劲,今天终于研究了代码实现,一下子感觉清晰多了。先把总结如下,代码中有详细的注释。

动画分类

   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>


  相关解决方案