码迷,mamicode.com
首页 > 移动开发 > 详细

Android下的动画

时间:2016-02-23 00:57:43      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

        ------你需要努力,你还没资格休息-----
Android下的动画有三种:
      tween补间动画、frame帧动画、property属性动画(Android3.0后提出来的)。
补间动画
Translation(平移)、Rotation(旋转)、Alpha(透明)、Scale(缩放)
代码方式:透明动画AlphaAnimation alpha=new AlphaAnimation(0,1);
alpha.setDuration(2000);//执行的时间
alpha.setFillAfter(true);//是否维持结束时状态
xml方式:在es/anim文件夹下面创建四个xml文件
<?xml version="1.0" encoding="utf-8"?>
                      <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
                      android:fromAlpha="1.0"
                      android:toAlpha="0.5"
                      android:fillAfter="true"
                      android:duration="2000" >
                     </alpha>
在代码中引用AnimationUtils.loadAnimation(this, R.anim.anim_alpha);
执行动画的控件调用方法startAnimation(alpha)执行动画
                     
动画集合AnimationSet set=new AnimationSet(true),通过set.addAnimation();//添加动画
要执行的动画的空间如RelativeLayout对象调用startAnimation(set);//执行动画
帧动画:
像电影一样,隔段时间改变背景图片。
在drawable创建一个xml文件使用
<animator-list>
<item android:drawable="@drawable/girl_11";android:duration="200"/>
</animator-list>
属性动画:
继承关系:Animator->ValueAnimator->ObjectAnimator
提供了ofInt、ofFloat、ofObject。

objectAnimator:
              如:objectAnimator.ofFloat(mImageView,"translationx",0f,200f).setDuration(200).start();
当多个动画时候使用propertyValuesHolder:
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f, 0f, 1f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f);  
PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f);    
ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(1000).start();
valueAnimator:
和objectanimator用法相似,但是比objectanimator跟灵活,不需要操作属性,但一定要有getter和setter方法

            public void verticalRun( View view)
                   {
                 ValueAnimator animator = ValueAnimator.ofFloat(0, mScreenHeight
                       - mBlueBall.getHeight());
                         animator.setTarget(mBlueBall);
                 animator.setDuration(1000).start();
                // animator.setInterpolator(value)
             animator.addUpdateListener(new AnimatorUpdateListener()
         {
          public void onAnimationUpdate(ValueAnimator animation)
         {
          mBlueBall.setTranslationY((Float) animation.getAnimatedValue());
               }
             });
       }

自定义属性:抛物线       

    public void paowuxian(View view)
    {

      ValueAnimator valueAnimator = new ValueAnimator();
      valueAnimator.setDuration(3000);
      valueAnimator.setObjectValues(new PointF(0, 0));
       valueAnimator.setInterpolator(new LinearInterpolator()); //源码中的,插值
        valueAnimator.setEvaluator(new TypeEvaluator<PointF>() //自定义TypeEvaluator返回PoinF类型
       {
    // fraction = t / duration
     @Override
      public PointF evaluate(float fraction, PointF startValue,
        PointF endValue)
        {
       Log.e(TAG, fraction * 3 + "");
       // x方向200px/s ,则y方向0.5 * 10 * t
      PointF point = new PointF();
        point.x = 200 * fraction * 3;
      point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3);
      return point;
     }
      });

    valueAnimator.start();
         valueAnimator.addUpdateListener(new AnimatorUpdateListener()
      {
           @Override
        public void onAnimationUpdate(ValueAnimator animation)
        {
         PointF point = (PointF) animation.getAnimatedValue();
         mBlueBall.setX(point.x);
         mBlueBall.setY(point.y);

             }
         });
      }

 

       ----------小弟才艺不精,如有纰漏.请各位赐教------ 

Android下的动画

标签:

原文地址:http://www.cnblogs.com/yangyiyi/p/5208604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!