Android进阶学习-属性动画(使用Animator封装特效工具类1)

其实关于Animation动画还是有点不足的,动画过后容易造成事件丢失,测试下面的例子

TranslateAnimation =new TranslateAnimation(0, 0, 100, 100);
rotateAnimation.setDuration(1000);
translateAnimation.setFillAfter(true);
translateBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        translateBtn.startAnimation(translateAnimation);
    }
});

多次点击Button后,它越走越远,但是一定距离后就造成了事件丢失.怎么回事呢?是因为Animation的动画只是改变了绘制出来的图片的位置,而View得位置是没有变的.因此我们绑定在View的事件就好像丢失了,实际上你点击原来View的位置.点击事件还是存在的,但是你只是View已经看不到了而已.那么我们有没有解决方法呢?有

    1.存储位移的位置,然后在动画结束的时候使用View.invalidate(int l,int t,int r,int b)去从新绘制View的位置,使其与动画位置一直.

    2.使用属性动画Animator代替Animation(推荐)

我们来聊聊Animator的用法吧,首先它能实现Animation的效果,也有类似AnimationSet的类去把动画装起来一起播放或者按顺序播放

简单用法,

    ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(v, "alpha", 0, 1);
    alphaAnimator.start();

    其中v就是需要作用的View,就是"alpha"是需要设置的属性,0是初始化的透明度,1是结束的透明度.一些Animation的方法,在这里也几乎是一样的,所以更多方法请移步前面一般动画的文章.

    有朋友可能会问,我怎么知道第二个属性填什么内容?很简单,你可以使用v.set????这样写,看IDE工具提示什么东西,如果是与动画相关的几乎都能写例如v.setTranslationX(),那么你第二个参数就可以写translationX.其实一共就那么四个.不过还可以自己去定义,后面会给一面文章讲一下自定义属性配合属性动画来做动画.

    还有一个AnimatorSet,这个类相对于前面的来说比较有趣,说一些除了设置持续时间等于AnimationSet雷同的常见的方法   

    playTogether(Animator a1,Animator a2,...)    //后面可以跟无数多个动画,一起播放的
    playSequentially(Animator a1,Animator a2,...)    //类似上面那个,不过是按顺序播放
    play(Animation a)  
    with(Animation a)    
    before(Animation a)    
    after(Animation a)

    上面四个方法连着说才好理解

 set.play(Animator a1).with(Animator a2).before(Animator a3).after(Animator a4);

        a3->a1,a2->a4    //箭头是顺序播放,逗号是一起播放

    就大概这么点东西,当然只是皮毛

转载于:https://my.oschina.net/august1996/blog/658240

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值