官方网站建设要点,网站做收录,如何优化搜索引擎的搜索功能,公司主页设计案例Android3.0之前有两种动画#xff0c;一种方式是补间动画 Tween Animation、另一种叫逐帧动画 Frame Animation#xff08;也称Drawable Animation #xff09;Android3.0以后增加了属性动画 Property Animation。Tween Animation、Frame Animation只能用于View#xff0c;…Android3.0之前有两种动画一种方式是补间动画 Tween Animation、另一种叫逐帧动画 Frame Animation也称Drawable Animation Android3.0以后增加了属性动画 Property Animation。Tween Animation、Frame Animation只能用于View被归类为View Animation。
一、1、View Animation
视图动画提供AlphaAnimation、RotateAniamtion、TranslateAniamtion、ScaleAnimation四种动画方式。
1AlphaAnimation透明度动画 public class AlphaAnimation extends Animation java.lang.Object ↳android.view.animation.Animation ↳android.view.animation.AlphaAnimation AlphaAnimation(float fromAlpha, float toAlpha),0为全透明1为不透明。 span stylefont-size:18px;AlphaAnimation alphaAnimation new AlphaAniamtion(0,1);
alphaAnimation.setDuration(1000);
view.startAnimation(alphaAnimation);/span res/anim/ span stylefont-size:18px;alpha
android:fromAlpha0.0
android:toAlpha1.0//span 2RotateAnimation旋转动画 public class RotateAnimation extends Animation java.lang.Object ↳android.view.animation.Animation ↳android.view.animation.RotateAnimation 常用的构造函数 RotateAnimation(float fromDegrees, float toDegrees)Constructor to use when building a RotateAnimation from code. RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)Constructor to use when building a RotateAnimation from code RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)Constructor to use when building a RotateAnimation from code span stylewhite-space:pre /spanbtn (Button)findViewById(R.id.b);rotateAnimation2 new RotateAnimation(0f,1080f,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimati on.RELATIVE_TO_SELF,0.5f);btn.setOnClickListener(new OnClickListener(){Overridepublic void onClick(View v) {// TODO Auto-generated method stubrotateAnimation2.setInterpolator(new OvershootInterpolator());rotateAnimation2.setDuration(3000);btn.setAnimation(rotateAnimation2);btn.startAnimation(rotateAnimation2);} }); res/anim
?xml version1.0 encodingutf-8?
rotate xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:fromDegrees0android:pivotX50%android:pivotY50%android:toDegrees1080.0shapeandroid:innerRadiusRatio3android:shaperingandroid:thicknessRatio8android:useLevelfalsegradientandroid:endColor#2F90BDandroid:startColor#FFFFFFandroid:typesweep //shape
/rotate
!-- 放在anim文件夹下AnimationUtils.loadAnimation(this, R.anim.shape_ring);
image.startAnimation(animation);
3TranslateAniamtion位移动画 public class TranslateAnimation extends Animation java.lang.Object ↳android.view.animation.Animation ↳android.view.animation.TranslateAnimation 常用构造函数 TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)Constructor to use when building a TranslateAnimation from code TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)Constructor to use when building a TranslateAnimation from code span stylefont-size:18px;TranslateAnimation translateAnimation new TranslateAnimation(0,200,0,300);
translationAnimation.setDuration(1000);
view.startAniamtion(translateAniamtion);/span
res/anim span stylefont-size:18px; translate android:fromXDeltafloat android:toXDeltafloat android:fromYDeltafloat android:toYDeltafloat / /span
4ScaleAniamtion缩放动画 public class ScaleAnimation extends Animation java.lang.Object ↳android.view.animation.Animation ↳android.view.animation.ScaleAnimation 常用构造函数 ScaleAnimation(float fromX, float toX, float fromY, float toY)Constructor to use when building a ScaleAnimation from code ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)Constructor to use when building a ScaleAnimation from code ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)Constructor to use when building a ScaleAnimation from code ScaleAniamtion scaleAniamtion new ScaleAniamtion(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5F,Animation.RELATIVE_TO_SELF,0.5F);
scaleAniamtion.setDuration(1000);
view.startAniamtion(scaleAnimation);
res/animscale android:fromXScalefloat android:toXScalefloat android:fromYScalefloat android:toYScalefloat android:pivotXfloat android:pivotYfloat /
动画集合AnimationSetpublic class AnimationSet extends Animation java.lang.Object ↳android.view.animation.Animation ↳android.view.animation.AnimationSet 构造函数 AnimationSet(boolean shareInterpolator)
Constructor to use when building an AnimationSet from codeAnimationSet set new AnimationSet(true);button2 (Button)findViewById(R.id.b5);button2.setOnClickListener(new OnClickListener(){Overridepublic void onClick(View v){set.addAnimation(alphaAnimation);set.addAnimation(rotateAnimation);set.setDuration(3000);button2.startAnimation(set);}});//动画集
res/anima?xml version1.0 encodingutf-8?
set xmlns:androidhttp://schemas.android.com/apk/res/android android:interpolator[package:]anim/interpolator_resource android:shareInterpolator[true | false] alpha android:fromAlphafloat android:toAlphafloat / scale android:fromXScalefloat android:toXScalefloat android:fromYScalefloat android:toYScalefloat android:pivotXfloat android:pivotYfloat / translate android:fromXDeltafloat android:toXDeltafloat android:fromYDeltafloat android:toYDeltafloat / rotate android:fromDegreesfloat android:toDegreesfloat android:pivotXfloat android:pivotYfloat / set ... /set
/set
在java代码中使用 ImageView spaceshipImage (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
2、Drawable Animation逐帧动画 可以使用多幅图片实现动画效果。 首先定义一个以 animation-list为根节点的xml文件命名为 anim.xml 放在 res/drawable/目录下。
animation-list xmlns:androidhttp://schemas.android.com/apk/res/android android:oneshottrue item android:drawabledrawable/image1 android:duration200 / item android:drawabledrawable/image2 android:duration200 / item android:drawabledrawable/image3 android:duration200 /
/animation-list
对控件中使用此动画 ImageView image (ImageView) findViewById(R.id.rocket_image);
image.setBackgroundResource(R.drawable.rocket_thrust);
AnimationDrawable animation (AnimationDrawable) image.getBackground();
animation.start(); 3、视图动画的监听 animation.setAnimationListener(new AnimationListener(){Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stubmHandler.post(new Runnable(){Overridepublic void run() {// TODO Auto-generated method stubIntent intent new Intent(WelcomActivity.this,MainActivity.class);startActivity(intent);WelcomActivity.this.finish();}});} 视图动画实现原理每次绘制视图时View所在的ViewGroup中的drawChild()函数获取该View的Animation的Transformation值然后调用canvas.concat(transformToApply.getMatrix());通过矩阵完成动画帧。若动画没有完成就调用invalidate()函数启动下次绘制来驱动动画从而完成整个动画绘制。
视图动画一个非常大的缺陷当view发生视图动画后其相应事件的位置还在动画前的地方不具备交互性。优点效率高、使用方便。
二、PropertyAnimation属性动画
PropertyAnimation是通过修改控件的属性实现的动画基本上可以实现所有动画效果并且可以交互。
常用的属性动画ObjectAnimator、AnimatorSetPropertyValuesHolder也可以实现类似效果、ValueAnimator、TimeAnimator...
1、ObjectAnimator public final class ObjectAnimator extends ValueAnimator java.lang.Object ↳android.animation.Animator ↳android.animation.ValueAnimator ↳android.animation.ObjectAnimator ObjectAnimator是属性动画框架中最重要的实行类创建通过静态工厂类直接返回一个ObjectAnimator对象. static T ObjectAnimatorofFloat(T target,PropertyT, Float property, float... values)Constructs and returns an ObjectAnimator that animates between float values. static ObjectAnimatorofFloat(Object target,String propertyName, float... values) Constructs and returns an ObjectAnimator that animates between float values. static T ObjectAnimatorofInt(T target,PropertyT, Integer property, int... values)Constructs and returns an ObjectAnimator that animates between int values. static ObjectAnimatorofInt(Object target,String propertyName, int... values) Constructs and returns an ObjectAnimator that animates between int values. static T, V ObjectAnimatorofObject(T target,PropertyT, V property,TypeEvaluatorV evaluator, V... values) Constructs and returns an ObjectAnimator that animates between Object values. static ObjectAnimatorofObject(Object target,String propertyName, TypeEvaluator evaluator,Object... values) Constructs and returns an ObjectAnimator that animates between Object values. static ObjectAnimatorofPropertyValuesHolder(Object target,PropertyValuesHolder... values) Constructs and returns an ObjectAnimator that animates between the sets of values specified inPropertyValueHolder objects. objectAnimator ObjectAnimator.ofFloat(view, translationX, 300);
参数包括一个实施动画的对象targeteg.viewtarget的属性名eg.translationX第三个参数是一个可变数组参数传入该属性值变化的过程但这个属性必须有get和set函数否则ObjectAnimator无法有作用内部会通过java反射机制来调用set函数修改对象的属性值。 例平移动画 objectAnimator ObjectAnimator.ofFloat(view, translationX, 300);
objectAnimator.setRepeatCount(3);//ObjectAnimator.INFINITE
//objectAnimator.setDuration(3000);//设置setRepeatCount后Duration不起作用了
objectAnimator.start();
常用的可以直接使用的属性动画的属性值 translationX、translationY作为一种增量控制View对象从它布局容器的左上角坐标偏移的位置。rotation、rotationX、rotationYtarget绕它的支点进行2D、3D旋转。scaleX、scaleYtarget绕它的支点进行2D缩放。pivotX、pivotY控制这target的支点位置围绕这个支点进行旋转和缩放处理。默认是target的中心。x、y描述target在容器中的最终位置是最初的左上角坐标和translationX、translationY值的和。alphatarget的透明度。默认1不透明0完全透明不可见。 如果想要作用动画的对象没有get和set方法可以通过自定义一个属性类或包装类间接的给这个属性添加get和set方法为target添加一个height属性 package sunny.example.helloandroidheroesxmlshape;
//自定义一个包装类间接给要进行动画的view增加它本身没有的get、set属性
import android.view.View;
public class WrapperView {private View mTarget;public WrapperView(View v){this.mTarget v;}public int getHeight(){return mTarget.getLayoutParams().height;}public void setHeight(int height){mTarget.getLayoutParams().height height;mTarget.requestLayout();}
}
使用height属性objectAnimator1 ObjectAnimator.ofInt(viewWrapper, height, 100);//
objectAnimator1.setDuration(3000).start();
2、ValueAniamtorpublic class ValueAnimator extends Animator java.lang.Object ↳android.animation.Animator ↳android.animation.ValueAnimator 创建对象 static ValueAnimatorofFloat(float... values)Constructs and returns a ValueAnimator that animates between float values. static ValueAnimatorofInt(int... values)Constructs and returns a ValueAnimator that animates between int values. static ValueAnimatorofObject(TypeEvaluator evaluator,Object... values)Constructs and returns a ValueAnimator that animates between Object values. static ValueAnimatorofPropertyValuesHolder(PropertyValuesHolder... values)Constructs and returns a ValueAnimator that animates between the values specified in the PropertyValuesHolder objects. ValueAnimator是属性动画的核心所在其本身不提供任何动画效果更像一个数值发生器用来产生具有移动规律的数字从而让调用者来控制动画的实现过程 ValueAniamtor valueAnimator ValueAniamtor.ofFloat(0,100);
animator.setTarget(view);
animator.setDuration(3000).start();
aniamtor.addUpdateListener(new AnimatorUpdateListaner(){
Override
public void onAniamtionUpdate(ValueAnimator animation){
Float value (Float)animation.getAnimatedValue();}
});
3、AnimatorSetpublic final class AnimatorSet extends Animator java.lang.Object ↳android.animation.Animator ↳android.animation.AnimatorSet 对一个target的属性作用多个动画效果并可以控制各个动画执行顺序
ObjectAniamtor animator1 ObjectAnimator.ofFloat(view,translationX,300f);
ObjectAnimator animator2 ObjectAnimator.ofFloat(view,scaleX,1f,0f,1f);
AnimationSet set new AnimationSet();
set.setDuration(3000);
//set.play(animator1).after(animator2);
//set.playTogether(animator1,animator2);
//set.play(animator1).before(animator2);
//set.play(animator1).before(animator2).before(animator3);//此时时animator1结束后会同时play animator2和3
set.playSequentially(animator1,animator2);//1结束后执行2
set.start();4、PropertyValuesHolder public class
PropertyValuesHolder
extends Object implements Cloneable类似视图动画AnimationSet可以对target的多个属性作用动画
h1 PropertyValuesHolder.ofFloat(translationX, 300f);
h2 PropertyValuesHolder.ofFloat(scaleY, 1f,0.5f);
h3 PropertyValuesHolder.ofInt(alpha, 0,1);
ObjectAnimator.ofPropertyValuesHolder(view1,h1,h2,h3).start();
5、动画事件的监听 objectAnimator1.addListener(new AnimatorListener(){Overridepublic void onAnimationStart(Animator animation) {// TODO Auto-generated method stub}Overridepublic void onAnimationEnd(Animator animation) {// TODO Auto-generated method stub}Overridepublic void onAnimationCancel(Animator animation) {// TODO Auto-generated method stub}Overridepublic void onAnimationRepeat(Animator animation) {// TODO Auto-generated method stub}});6、在XML中使用属性动画 ?xml version1.0 encodingutf-8?
objectAnimator xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:duration1000android:propertyNamescaleXandroid:valueFrom1.0android:valueTo2.0android:valueTypefloatType /objectAnimator在程序中使用XML中定义的动画 public void scaleX(View v){
Animator ani AnimatorInflater.loadAnimator(this,R.animator.scaleX);
ani.setTarget(mButton);
ani.start();}
github:https://github.com/HiSunny/HelloAnimation.git