android 属性动画2

http://blog.csdn.net/yegongheng/article/details/38435553

#ObjectAnimator

ofFloat 对象 ,属性名(对象存在get set的属性) ,变化的范围


属性

一组属性动画

ImageView imageView= (ImageView) findViewById(R.id.img);
//旋转360度
ObjectAnimator.ofFloat(imageView,"rotation",0f,360f).setDuration(1000).start();
//x坐标变换
ObjectAnimator.ofFloat(imageView,"translationX",0f,200f).setDuration(1000).start();
//y坐标变换
ObjectAnimator.ofFloat(imageView,"translationY",0f,200f).setDuration(1000).start();

一组属性动画
常见的属性

PropertyValuesHolder p1=PropertyValuesHolder.ofFloat("rotation",0f,360f);
PropertyValuesHolder p2=PropertyValuesHolder.ofFloat("translationX",0f,200f);
PropertyValuesHolder p3=PropertyValuesHolder.ofFloat("translationY",0f,200f);
ObjectAnimator.ofPropertyValuesHolder(imageView,p1,p2,p3).setDuration(1000).start();

用AnimatorSet 执行一组动画 可以设置执行顺序

ObjectAnimator oa1=ObjectAnimator.ofFloat(imageView,"rotation",0f,360f);
ObjectAnimator oa2=ObjectAnimator.ofFloat(imageView,"translationX",0f,200f);
ObjectAnimator oa3=ObjectAnimator.ofFloat(imageView,"translationY",0f,200f);
AnimatorSet set=new AnimatorSet();
//一起执行
//set.playTogether(oa1,oa2,oa3);
//依次执行
//set.playSequentially(oa1,oa2,oa3);
//3  2一起执行
set.play(oa2).with(oa3);
//执行完 2在执行1
set.play(oa1).after(oa2);
set.setDuration(1000);
set.start();

#动画的监听 (监听动画的开始 结束 取消 ...)
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(v,"alpha",0f,1f);
//全部重写
objectAnimator.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {

    }

    @Override
    public void onAnimationEnd(Animator animation) {
        Toast.makeText(AnimationListenEventActivity.this,"anim end",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAnimationCancel(Animator animation) {

    }

    @Override
    public void onAnimationRepeat(Animator animation) {

    }
});


//按 需求重写
objectAnimator.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        Toast.makeText(AnimationListenEventActivity.this,"anim stop",Toast.LENGTH_SHORT).show();
    }
});
objectAnimator.setDuration(1000);
objectAnimator.start();

两种方式 第一种 实例化 AnimatorListener 需要重写所有监听
第二种 实例化 AnimatorListenerAdapter 需要哪个监听就重写哪个


#valueAnimator

objectanimator 继承valueanimator

Valueanimator实现的定时器
5秒内从0走到100
在onAnimationUpdate给button重新赋值

final Button button=(Button)v;
ValueAnimator valueAnimator=ValueAnimator.ofInt(0,100);
valueAnimator.setDuration(5000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        //获取每次修改的值
        Integer value= (Integer) animation.getAnimatedValue();
        button.setText(""+value);
    }
});

valueAnimator.start();

代码
https://github.com/shaomiao/PropertyAnimationDemo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值