Android进阶学习-属性动画(使用Animator封装特效工具类1)
2016-04-13 00:00
816 查看
其实关于Animation动画还是有点不足的,动画过后容易造成事件丢失,测试下面的例子
多次点击Button后,它越走越远,但是一定距离后就造成了事件丢失.怎么回事呢?是因为Animation的动画只是改变了绘制出来的图片的位置,而View得位置是没有变的.因此我们绑定在View的事件就好像丢失了,实际上你点击原来View的位置.点击事件还是存在的,但是你只是View已经看不到了而已.那么我们有没有解决方法呢?有
1.存储位移的位置,然后在动画结束的时候使用View.invalidate(int l,int t,int r,int b)去从新绘制View的位置,使其与动画位置一直.
2.使用属性动画Animator代替Animation(推荐)
我们来聊聊Animator的用法吧,首先它能实现Animation的效果,也有类似AnimationSet的类去把动画装起来一起播放或者按顺序播放
简单用法,
其中v就是需要作用的View,就是"alpha"是需要设置的属性,0是初始化的透明度,1是结束的透明度.一些Animation的方法,在这里也几乎是一样的,所以更多方法请移步前面一般动画的文章.
有朋友可能会问,我怎么知道第二个属性填什么内容?很简单,你可以使用v.set????这样写,看IDE工具提示什么东西,如果是与动画相关的几乎都能写例如v.setTranslationX(),那么你第二个参数就可以写translationX.其实一共就那么四个.不过还可以自己去定义,后面会给一面文章讲一下自定义属性配合属性动画来做动画.
还有一个AnimatorSet,这个类相对于前面的来说比较有趣,说一些除了设置持续时间等于AnimationSet雷同的常见的方法
上面四个方法连着说才好理解
a3->a1,a2->a4 //箭头是顺序播放,逗号是一起播放
就大概这么点东西,当然只是皮毛
[code=plain]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的类去把动画装起来一起播放或者按顺序播放
简单用法,
[code=plain] ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(v, "alpha", 0, 1); alphaAnimator.start();
其中v就是需要作用的View,就是"alpha"是需要设置的属性,0是初始化的透明度,1是结束的透明度.一些Animation的方法,在这里也几乎是一样的,所以更多方法请移步前面一般动画的文章.
有朋友可能会问,我怎么知道第二个属性填什么内容?很简单,你可以使用v.set????这样写,看IDE工具提示什么东西,如果是与动画相关的几乎都能写例如v.setTranslationX(),那么你第二个参数就可以写translationX.其实一共就那么四个.不过还可以自己去定义,后面会给一面文章讲一下自定义属性配合属性动画来做动画.
还有一个AnimatorSet,这个类相对于前面的来说比较有趣,说一些除了设置持续时间等于AnimationSet雷同的常见的方法
[code=plain] playTogether(Animator a1,Animator a2,...) //后面可以跟无数多个动画,一起播放的 playSequentially(Animator a1,Animator a2,...) //类似上面那个,不过是按顺序播放 play(Animation a) with(Animation a) before(Animation a) after(Animation a)
上面四个方法连着说才好理解
[code=plain] set.play(Animator a1).with(Animator a2).before(Animator a3).after(Animator a4);
a3->a1,a2->a4 //箭头是顺序播放,逗号是一起播放
就大概这么点东西,当然只是皮毛
相关文章推荐
- 图文详解Android属性动画
- android属性动画animator
- 安卓 属性动画 ValueAnimator ObjectAnimator 源码分析 关键处
- nineoldandroids的使用
- Android动画学习笔记-Android Animation
- Android动画之Property Animation(二)
- 7_Android动画深入分析
- android propertyAnimator--()
- android 动画之 属性动画propertyAnimator(一)
- 欢迎使用CSDN-markdown编辑器
- 【安卓-动画】使用ObjectAnimator实现ArcMenu动画效果
- animator,视图控制器的视图转化为物理世界,图片添加重力碰撞,边缘碰撞属性
- 挨踢人的工作日志(2015.11.26)
- 自定义View进阶(一)——爱的贝塞尔曲线
- 从零学Android(十二)、Android中的图形和动画之属性动画
- 【Unity3d】Animator和Animation组件使用注意事项
- 属性动画、事件分发和自定义控件
- Android 属性动画(Property Animation) 完全解析 (下)
- Android进阶学习-打造一个通用的RecyclerViewAdapter
- Android进阶学习-查看手机进程信息