昨天我们介绍了animation的基本用法。小伙伴们了解的怎么样了?如果还没有了解过animation的小伙伴可以看看这篇博客
android动画介绍--animation 实现loading动画效果
安卓内置的四种动画虽然说可以用animationset进行组合操作,但是这些组合往往在特定场合是不够用的,就像view一样,我们可以自定义动画效果。
今天要做成的效果是模仿qq的抖一抖效果,老规矩,先来看今天的效果图:
自定义动画的实现方法为 继承animation类重写applytransformation()方法
public class customanimation extends animation { @override protected void applytransformation(float interpolatedtime, transformation t) { t.getmatrix().settranslate((float)math.sin(interpolatedtime*50)*20,0); super.applytransformation(interpolatedtime, t); }}
可以看到 applytransformation()方法有两个参数 第一个参数interpolatedtime代表一个0-1逐渐增大的float, t代表view所需要的变化,例如t.setalpha(); t.settranslate();顾名思义这两个方法是发生透明度变化和位移变化。
那么我们今天的目标是实现抖一抖效果,思路如下: view先向左位移,再向右位移。 坐标为 (0-n,0) --->(0+n,n),一正一负的变化,就要用到我们的三角函数了。所以这里t.settranslate(math.sin())。
这样基本上我们的自定义 动画就完成了,接下来在mainactivity下获取当前的布局,给他添加动画效果
public class mainactivity extends actionbaractivity { private button mbutton; private relativelayout mrelativelayout; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mbutton = (button) findviewbyid(r.id.shake); mrelativelayout = (relativelayout) findviewbyid(r.id.relativelayout); final customanimation ca = new customanimation(); ca.setduration(1000); mbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { mrelativelayout.startanimation(ca); } }); }}
这样便大功告成!如果喜欢我的博客,请点赞哦
源代码下载
版权声明:本文为博主原创文章,欢迎注明出处后转载。