android 动画

属性动画:Animator,AnimatorSet,ObjectAnimator

属性动画可以设定顺序执行一系列的动画操作,在某一时刻也可以同时也就是叠加执行多个动画,相比于Animation类更灵活。

属性值:

1)translationX 和translationY:这两个属性控制了View所处的位置,它们的值是由layout容器设置的,是相对于坐标原点(0,0左上角)的一个偏移量。

2)rotation, rotationX 和 rotationY:控制View绕着轴点(pivotX和pivotY)旋转。

3)scaleX 和 scaleY:控制View基于pivotX和pivotY的缩放。

4)pivotX 和 pivotY:旋转的轴点和缩放的基准点,默认是View的中心点。

5)x 和 y:描述了view在其父容器中的最终位置,是左上角坐标和偏移量(translationX,translationY)的和。

6)aplha:透明度,1是完全不透明,0是完全透明。

简单使用ObjectAnimator

ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 50f);
ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 100f);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(animX, animY);// playTogether表示异步叠加,还有playSequentially,表示同步执行
animSetXY.start();

利用PropertyValuesHolder,属性集合

//PropertyValuesHolder属性holder,分别设置X,Y方向的移动值,然后调用ofPropertyValuesHolder设置属性值,这个是异步叠加动画。
//参数指的是相对于view最初位置的偏移值

PropertyValuesHolder pvhX =PropertyValuesHolder.ofFloat("translationX",原point值减去view的point,现point值减去view的值);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY",同上);

//参数ofFloat,第一个是属性,多参数values这是一组值,就是由什么值变动到另外一个什么值,再到什么什么值

//如下表示绕着垂直于屏幕的Z轴旋转,从0度顺时针旋转到120度。

PropertyValuesHolderPropertyValuesHolder pvhR = PropertyValuesHolder. ofFloat("rotation", 0,120);

关键帧Keyframe,配合PropertyValuesHolder使用

//Keyframe类型对象由一个time/value对组成,定义了指定时间点的指定值。

//其中ofFloat第一个参数是从0f到1f表示整个过程比例,第二个参数表示values

Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(0.5f, 60f);
Keyframe kf2 = Keyframe.ofFloat(1f, 120f);

// 用三个关键帧构造PropertyValuesHolder对象,最后装配到ObjectAnimator,再用Animatorset来play,start。
   PropertyValuesHolder pvhX = PropertyValuesHolder.ofKeyframe(
                        "x", kf0, kf1, kf2);
animator= ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhR).setDuration(1000);



ViewPropertyAnimator新方法

myView.animate().x(50f).y(100f);

AnimatorSet

有两种执行动画方式:同步顺序,异步叠加

分别对应playtogether,playSequentially

Playtogether重载成两种:多参数也就是多个动画Animator;

                                                        Collection集合类,集合类中包括了多个动画。

playSequentially重载成两种:多参数也就是多个动画Animator;

                                                        List列表类,列表类中包括了多个动画,这样就是可以顺序执行。

利用ofPropertyValuesHolder可以添加异步动画,然后再添加到Animatorlist列表里形成同步动画组。这样就可以兼顾同步和异步的形式,是动画扩展性很强。

animator2=ObjectAnimator.ofPropertyValuesHolder(view, pvhY,pvhR).setDuration(1000);
animator=ObjectAnimator.ofPropertyValuesHolder(view, pvhW).setDuration(1000);
lt.add(animator2);
lt.add(animator);
set.playSequentially(lt);//这样的话pvhY和pyhR就是同时进行pvhW就是顺序执行。

AnimatorListener

动画和动画集合都可以添加监听器,分别处理动画开始,结束,暂停,重播的事件。

而且AnimatorSet 的监听器开始事件是在所有动画开始之前执行,结束事件是在所有动画结束后再执行。

set.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        //所有手势不可用
        mUiSettings.setAllGesturesEnabled(false);
        Log.i(TAG, "set_____________start");
    }
    @Override
    public void onAnimationEnd(Animator animation) {
        mMapView.removeViewInLayout(iv);
        //所有手势可用
        mUiSettings.setAllGesturesEnabled(true);
        Log.i(TAG, "set_____________end");
    }
    @Override
    public void onAnimationCancel(Animator animation) {}
    @Override
    public void onAnimationRepeat(Animator animation) { }
});
 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值