登录 立即注册
安币:

重庆时时彩反倍投打法|Android动画解析(一) [复制链接]

2018-4-13 10:42
liujh 阅读:264 评论:0 赞:0
Tag:  
本文来源:http://www.oneupabq.com/a/www.gygov.gov.cn/

重庆时时彩独胆倍投 www.oneupabq.com,奥尔来同她的助手格日来一起为绣品做最后的修饰。  根据名字上的线索,记者找到了这“结婚证”里的男孩小聪,“小智,我认识她,她是三班的,离我班很近。

一、动画分类:

1、两种类型:View Animation(视图动画)、Property Animator(属性动画)
( 或者分为View动画(Tween Animation)、逐帧动画、属性动画三种)。
  • View Animation包括Tween Animation(补间动画)和Frame Animation(逐帧动画); 
  • Property Animator包括ValueAnimator和ObjectAnimation;
2、区别:
  • 引入时间不同:View Animation是API Level 1就引入的。Property Animation是API Level 11引入的,即Android 3.0才开始有Property Animation相关的API。 
  • 所在包名不同:View Animation在包android.view.animation中。而Property Animation API在包 android.animation中。 
  • 动画类的命名不同:View Animation中动画类取名都叫XXXXAnimation,而在Property Animator中动画类的取名则叫XXXXAnimator
3、属性动画和补间动画的区别:
属性动画能够只针对控件的某一个属性来做动画,所以也就造就了他能单独改变控件的某一个属性的值!比如颜色!
补间动画虽能对控件做动画,但并没有改变控件内部的属性值。
二、逐帧动画:

将一系列图片按照一定的顺序播放(实例略)

三、View动画:

平移、缩放、旋转、透明度动画

1、常用属性:

-TranslateAnimation -> 移动View
    |-<translate>
        |-android:fillAfter -> 为true表示动画保存最后时的状态
        |-android:duration -> 表示动画持续的时间
        |-android:fromXDelta -> 表示 x 的起始值
        |-android:toXDelta -> 表示 x 的结束值
        |-android:fromYDelta -> 表示 y 的起始值
        |-android:toYDelta -> 表示 y 的结束值
-ScaleAnimation -> 放大或者缩小View
    |-<scale>
        |-android:duration -> 表示动画持续的时间
        |-android:fromXScale -> 表示水平方向缩放的起始值
        |-android:fromYScale -> 表示竖直方向缩放的起始值
        |-android:pivotX -> 表示缩放中心点的 X 坐标
        |-android:pivotY -> 表示缩放中心点的 Y 坐标
        |-android:toXScale -> 表示水平方向缩放的结束值
        |-android:toYScale -> 表示竖直方向缩放的结束值
-RotateAnimation -> 旋转View
    |-<rotate>
        |-android:duration -> 表示动画持续的时间
        |-android:fromDegrees -> 旋转开始的角度,正数顺时针,负数逆时针
        |-android:toDegrees -> 旋转结束的角度
        |-android:pivotX -> 旋转中心点的 X 坐标
        |-android:pivotY -> 旋转中心点的 Y 坐标
-AlphaAnimation -> 改变View的透明度
    |-<alpha>
        |-android:duration -> 表示动画持续的时间
        |-android:fromAlpha -> 透明度的起始值
        |-android:toAlpha -> 透明度的结束值


2、其他属性:

  • android:interpolator -> 插值器,影响动画的速度
  •        默认值 -> @android:anim/accelerate_decelerate_interpolator
  • android:shareInterpolator -> 集合所有动画是否使用同一插值器
  • android:fillAfter -> 动画结束后View是否停留在结束的位置
  • android:startOffset -> 动画多少秒之后执行
  • android:repeatCount -> 重复的次数
  • android:repeatMode -> 重复的模式,默认为restart,即重头开始重新运行,reverse即从结束开始向前重新运行(必须和repeatCount一起使用)
3、相关代码:
  • ScaleAnimation(Context context, AttributeSet attrs)  
  • ScaleAnimation(float fromX, float toX, float fromY, float toY)
  • ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
  • ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
  • AlphaAnimation(Context context, AttributeSet attrs)  
  • AlphaAnimation(float fromAlpha, float toAlpha)
  • RotateAnimation(Context context, AttributeSet attrs)  
  • RotateAnimation(float fromDegrees, float toDegrees)
  • RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
  • RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
  • TranslateAnimation(Context context, AttributeSet attrs)  
  • TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
  • TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

AnimationSet:
  • AnimationSet(Context context, AttributeSet attrs)  
  • AnimationSet(boolean shareInterpolator)  shareInterpolator取值true或false,取true时,指在AnimationSet中定义一个插值器(interpolater),它下面的所有动画共同。如果设为false,则表示它下面的动画自己定义各自的插值器。
  • public void addAnimation (Animation a)

4、View动画特殊使用场景

(1)LayoutAnimation
LayoutAnimation作用于ViewGroup,ViewGroup指定一个动画,子元素就具有这种动画效果
  • android:delay:动画时间延迟
  • android:animationOrder:子元素动画顺序:normal 顺序显示,reverse 逆向显示,random随机播放 
  • android:animation 指定具体入场动画    android:layoutAnimation=“@anim/..."
(2)Activity的切换
overridePendingTransition(int enterAnim,int exitAnim)    用于startActiivty或者finish的后面
Fragment可以通过FragmentTransaction中的setCustomAnimations方法来添加切换动画。

三、ValueAnimator:

1、开始动画:

ValueAnimator没有跟任何的控件相关联,那也正好说明ValueAnimator只是对值做动画运算,而不是针对控件。


  1. <span style='font-family: "Microsoft YaHei"; font-size: 18px;'>ValueAnimator animator = ValueAnimator.ofInt(0,400);    
  2. animator.setDuration(1000);    
  3. animator.start();    
  4. </span>  
2、添加监听:(监听当前进度具体数值)


  1. <span style='font-family: "Microsoft YaHei"; font-size: 18px;'>  ValueAnimator animator = ValueAnimator.ofInt(0400);  
  2.         animator.setDuration(1000);  
  3.         animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  4.             @Override  
  5.             public void onAnimationUpdate(ValueAnimator animation) {  
  6.                 int curValue = (int) animation.getAnimatedValue();  
  7.                         
  8.             }  
  9.         });  
  10.         animator.start();</span>  

3、根据监听的进度进行view的更新


  1. ValueAnimator animator = ValueAnimator.ofInt(0, 400);  
  2.       animator.setDuration(1000);  
  3.       animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  4.           @Override  
  5.           public void onAnimationUpdate(ValueAnimator animation) {  
  6.               int curValue = (int) animation.getAnimatedValue();  
  7.               //更新进度条进度  
  8.               progressBar.setProgress(curValue);  
  9.           }  
  10.       });  
  11.       animator.start();  

4、常用方法:


  1. public static ValueAnimator ofInt(int... values)    
  2. public static ValueAnimator ofFloat(float... values)    
参数类型都是可变参数长参数,所以我们可以传入任何数量的值;传进去的值列表,就表示动画时的变化范围


  1. /**  
  2.   * 设置动画时长,单位是毫秒   
  3.   */  
  4.  ValueAnimator setDuration ( long duration)  
  5.  /**  
  6.   * 获取ValueAnimator在运动时,当前运动点的值   
  7.   */  
  8.  Object getAnimatedValue ();  
  9.  /**  
  10.   * 开始动画   
  11.   */  
  12.  void start ()  
  13.  /**  
  14.   * 设置循环次数,设置为INFINITE表示无限循环   
  15.   */  
  16.  void setRepeatCount ( int value)  
  17.  /**  
  18.   * 设置循环模式   
  19.   * value取值有RESTART,REVERSE,   
  20.   */  
  21.  void setRepeatMode ( int value)  
  22.  /**  
  23.   * 取消动画   
  24.   */  
  25.  void cancel ()  
(1) setRepeatCount(int value)用于设置动画循环次数,设置为0表示不循环,设置为ValueAnimation.INFINITE表示无限循环。 
(2) setRepeatMode(int value)用于设置循环模式,取值为ValueAnimation.RESTART时,表示正序重新开始,当取值为ValueAnimation.REVERSE表示倒序重新开始。 

  1. /** 
  2.  * 延时多久时间开始,单位是毫秒  
  3.  */  
  4. public void setStartDelay ( long startDelay)  
  5. /** 
  6.  * 完全克隆一个ValueAnimator实例,包括它所有的设置以及所有对监听器代码的处理  
  7.  */  
  8. public ValueAnimator clone ()  
监听:


  1. /** 
  2.  * 监听器一:监听动画变化时的实时值  
  3.  */  
  4. public static interface AnimatorUpdateListener {  
  5.     void onAnimationUpdate(ValueAnimator animation);  
  6. }  
  7.   
  8. /** 
  9.  * 监听器二:监听动画变化时四个状态  
  10.  */  
  11. public static interface AnimatorListener {  
  12.     void onAnimationStart(Animator animation);  
  13.     void onAnimationEnd(Animator animation);  
  14.     void onAnimationCancel(Animator animation);  
  15.     void onAnimationRepeat(Animator animation);  
  16. }  
四个状态:start、end、cancel、repeat;

当动画开始时,会调用onAnimationStart(Animator animation)方法,

当动画结束时调用onAnimationEnd(Animator animation),

当动画取消时,调用onAnimationCancel(Animator animation)函数,

当动画重复时,会调用onAnimationRepeat(Animator animation)函数。 
取消监听:


  1. /** 
  2.  * 移除AnimatorUpdateListener  
  3.  */  
  4. void removeUpdateListener (AnimatorUpdateListener listener);  
  5. void removeAllUpdateListeners ();  
  6. /** 
  7.  * 移除AnimatorListener  
  8.  */  
  9. void removeListener (AnimatorListener listener);  
  10. void removeAllListeners ();  
5、ofObject 使用:


  1. public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values);    
它有两个参数,第一个是自定义的Evaluator,第二个是可变长参数,Object类型

例:


  1. public class Point {  
  2.        private int radius;  
  3.   
  4.        public Point(int radius) {  
  5.            this.radius = radius;  
  6.        }  
  7.   
  8.        public int getRadius() {  
  9.            return radius;  
  10.        }  
  11.   
  12.        public void setRadius(int radius) {  
  13.            this.radius = radius;  
  14.        }  
  15.    }  

  1. public class MyPointView extends View {  
  2.        public MyPointView(Context context) {  
  3.            super(context);  
  4.        }  
  5.   
  6.        public MyPointView(Context context, @Nullable AttributeSet attrs) {  
  7.            super(context, attrs);  
  8.        }  
  9.   
  10.        private Point mCurPoint;  
  11.   
  12.        @Override  
  13.        protected void onDraw(Canvas canvas) {  
  14.            super.onDraw(canvas);  
  15.            if (mCurPoint != null){  
  16.                Paint paint = new Paint();  
  17.                paint.setAntiAlias(true);  
  18.                paint.setColor(Color.RED);  
  19.                paint.setStyle(Paint.Style.FILL);  
  20.                canvas.drawCircle(300,300,mCurPoint.getRadius(),paint);  
  21.            }  
  22.        }  
  23.   
  24.        public void doPointAnim(){  
  25.            ValueAnimator animator = ValueAnimator.ofObject(new PointEvaluator(),new Point(20),new Point(200));  
  26.            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  27.                @Override  
  28.                public void onAnimationUpdate(ValueAnimator animation) {  
  29.                    mCurPoint = (Point)animation.getAnimatedValue();  
  30.                    invalidate();  
  31.                }  
  32.            });  
  33.            animator.setDuration(1000);  
  34.            animator.setRepeatMode(ValueAnimator.RESTART);  
  35.            animator.setRepeatCount(100);  
  36.            animator.setInterpolator(new BounceInterpolator());  
  37.            animator.start();  
  38.        }  
  39.   
  40.        public class PointEvaluator implements TypeEvaluator<Point> {  
  41.            @Override  
  42.            public Point evaluate(float fraction, Point startValue, Point endValue) {  
  43.                int start = startValue.getRadius();  
  44.                int end  = endValue.getRadius();  
  45.                int curValue = (int)(start + fraction * (end - start));  
  46.                return new Point(curValue);  
  47.            }  
  48.        }  
  49.    }  
分享到:
我来说两句
facelist
您需要登录后才可以评论 登录 | 立即注册
所有评论(0)

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

重庆时时彩独胆倍投广告投放| 下载客户端|申请友链|手机版|站点统计|重庆时时彩独胆倍投 ( 粤ICP备15117877号 )

返回顶部
小说 小说 小说 小说 小说 小说
小说 小说 小说 小说 小说 小说
小说 小说 小说 小说 小说 小说
排列三字谜汇总 吉林11选5遗漏 重庆时时彩稳赚技巧 福建体彩36选7开奖 军旗玩法
时时彩网 在线足球经理 福彩3d软件 幸运农场走势图 排列5走势图带连线