安卓属性动画

安卓动画分为:
1.逐帧动画:将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理。
2.补间动画:则是可以对View进行一系列的动画操作,包括淡入淡出、缩放、平移、旋转四种。
3.属性动画:可以通过改变对象的属性来达到更炫的动画效果。
这里只谈属性动画。
在首先了解几个方法:
1、setInterpolator():设置动画插值
2、setDuration():设置动画执行时间
3、setRepeatCount():设置动画重复次数
4、setRepeatMode():设置动画重复模式
5、setStartDelay():设置动画延时操作
6、setTarget():设置动画的对象
7、setEvaluator():设置动画过度的评估者。
这几个方法主要是配置你的动画的例如:

 ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.3f, 1.0F);
        animator.setDuration(2000);//动画时间
        animator.setInterpolator(new BounceInterpolator());//动画插值
        animator.setRepeatCount(-1);//设置动画重复次数
        animator.setRepeatMode(ValueAnimator.RESTART);//动画重复模式
        animator.setStartDelay(1000);//动画延时执行
        animator.start();//启动动画

再来说说几个重要的类:
1、ValueAnimator
2、ObjectAnimator
3、PropertyValuesHolder
4、LayoutTransition
接下来先讲 PropertyValuesHolder
一、PropertyValuesHolder
这个类可以实现一个动画更改多个效果但有一个缺点:只能多个动画一起执行,还得结合ObjectAnimator.ofPropertyValuesHolder(Object target,
PropertyValuesHolder… values)一块使用
实现方法:

PropertyValuesHolder pvhX =PropertyValuesHolder.ofFloat("alpha", 1f,1.5f, 1.0f, 0.0f, 1.3f, 0.8f, 1.0f);
PropertyValuesHolderpvhY=PropertyValuesHolder.ofFloat("scaleX", 1f,1.5f, 1.0f, 0.0f, 1.3f, 0.8f, 1.0f);
PropertyValuesHolderpvhZ=PropertyValuesHolder.ofFloat("scaleY", 1f,1.5f, 1.0f, 0.0f, 1.3f, 0.8f, 1.0f);
ObjectAnimatoranim=ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY, pvhZ).setDuration(1000);
anim.start();

二、ObjectAnimator
这是一个比较常用的类,他继承自ValueAnimator,
有几个比较常用的方法:ofFloat(),ofInt(),ofObject(),ofArgb(),
理解一下这几个方法
ofFloat() :执行浮点之间的插值
ofInt():执行int之间的插值
ofArgb():执行ARGB之间的插值
ofArgb():跟据一定的规则对目标对象的某个具体属性进行改变
举个例子:

ObjectAnimator.ofFloat(view, "rotationY",0.0F,180.0F,0.0F, 360.0F).setDuration(5000).start();

解释一下”rotationY”这个参数:你所设置的view中只要是带set属性的都可以;例如:如果这个View有 setRotationY() 方法,,你就可以写“rotationY”
三、ValueAnimator
用法与ObjectAnimator非常的相似,,只不过去除了属性而已,

ValueAnimator animator = ValueAnimator.ofFloat(0, 100);

但当你只写这一句时你会发现并没有你行要的效果,可以对比一下ObjectAnimator,你会发现这里少了属性这个参数,,所以需要我们手动设置 如:
animator.setTarget(view);
animator.setDuration(1000).start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
view.setTranslationY((Float) valueAnimator.getAnimatedValue());
}
});

当然,还有些需求就是我要在动画执行时有些其他的动作,ValueAnimator提供了addListener接口:

anim.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {

            }

            @Override
            public void onAnimationEnd(Animator animator) {
                Intent intent=new Intent(MainActivity.this, ValueAnimatorActivity.class);
                startActivity(intent);      overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_left);
            }
            @Override
            public void onAnimationCancel(Animator animator) {
            }
            @Override
            public void onAnimationRepeat(Animator animator) {
            }
        });

如果感觉这里代码太长,可以使用AnimatorListenerAdapter

animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);            Intent intent = new Intent(ValueAnimatorActivity.this, LayoutAnimations.class);
                startActivity(intent);
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值