我们都知道Android SDK给我们提供了4种常用的动画效果分别是:
AlphaAnimation:透明度变化动画
RotateAnimation:旋转动画
ScaleAnimation: 缩放动画
TranslateAnimation:位置变化动画
但有时这些动画不能满足我们的要求,所以我们要通过自定义动画的手段来实现我们个性化的动画。
学习自定义动画很简单,我们可以参考上面这些SDK中动画类,看它们是如何实现的。就以RotateAnimation为例:
public class RotateAnimation extends Animation { private float mFromDegrees; private float mToDegrees; private int mPivotXType = ABSOLUTE; private int mPivotYType = ABSOLUTE; private float mPivotXValue = 0.0f; private float mPivotYValue = 0.0f; private float mPivotX; private float mPivotY; public RotateAnimation(Context context, AttributeSet attrs) { super(context, attrs); // 省略 初始化变量那些事 } public RotateAnimation(float fromDegrees, float toDegrees) { // 省略 初始化变量那些事 } public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) { // 省略 初始化变量那些事 } public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) { // 省略 初始化变量那些事 } private void initializePivotPoint() { if (mPivotXType == ABSOLUTE) { mPivotX = mPivotXValue; } if (mPivotYType == ABSOLUTE) { mPivotY = mPivotYValue; } } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { float degrees = mFromDegrees + ((mToDegrees - mFromDegrees) * interpolatedTime); float scale = getScaleFactor(); if (mPivotX == 0.0f && mPivotY == 0.0f) { t.getMatrix().setRotate(degrees); } else { t.getMatrix().setRotate(degrees, mPivotX * scale, mPivotY * scale); } } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mPivotX = resolveSize(mPivotXType, mPivotXValue, width, parentWidth); mPivotY = resolveSize(mPivotYType, mPivotYValue, height, parentHeight); } }
从该类代码来看,它无非就是重写了applyTransformation,和initialize两个方法而已,而从方法名和内容可以知道applyTransformation就是最核心的动画实现方法。我们在进一步看看这个方法在父类是怎么定义的,在父类Animation类中找到该方法的定义
/** * Helper for getTransformation. Subclasses should implement this to apply * their transforms given an interpolation value. Implementations of this * method should always replace the specified Transformation or document * they are doing otherwise. * * @param interpolatedTime The value of the normalized time (0.0 to 1.0) * after it has been run through the interpolation function. * @param t The Transformation object to fill in with the current * transforms. */ protected void applyTransformation(float interpolatedTime, Transformation t) { }
通过注释我们明白了(也可以结合调试理解):
在动画执行期间,这个方法会被不断回调
参数interpolatedTime:从方法被第一次回调时的0.0,随着动画的执行不断增长,当动画结束时这个值是1.0
参数t:我们通过变化它来实现动画的动作
我们可以再写一个例子玩一下这个方法
class CustomerAnimation extends Animation { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { t.setAlpha(interpolatedTime); } }
就这么几行代码,我们自己实现了个透明度变化动画。
现在我们该了解的都了解了,可以开始动手做“摇摆”动画了
class CustomerAnimation extends Animation { private int mWaveTimes=5;//摇摆次数 private int mWaveRange=50;//摇摆幅度 public CustomerAnimation(){ } public CustomerAnimation(int waveTimes,int waveRange){ mWaveTimes = waveTimes; mWaveRange = waveRange; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { //运用周期性函数,实现左右摇摆 t.getMatrix().setTranslate((int)(Math.sin(interpolatedTime*Math.PI*mWaveTimes)*mWaveRange),0); } }
相关推荐
网上一实现晃动动画的demo,可以左右晃动,可以设置晃动时间等等
主要为大家详细介绍了Android自定义Animation实现View摇摆效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android的秋千摇摆动画代码例子,用于演示钟摆、秋千晃荡等左右摇摆的动画效果,下载即可使用
Android的秋千摇摆动画代码例子,用于演示钟摆、秋千晃荡等左右摇摆的动画效果
Android的秋千摇摆动画代码例子,用于演示钟摆、秋千晃荡等左右摇摆的动画效果.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
iOS核心动画CABasicAnimation很简单的实现了图片的循环左右摆动。
Android控件的一些动画效果,包含左右抖动动画,上下抖动动画,旋转抖动动画,摇摆动画,放大缩小动画,闪烁动画,显示隐藏动画
主要介绍了Android实现左右摆动的球体动画效果,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
一款有趣的css3猫挂在线球上左右摇摆动画特效,css3摇摆动画效果。
基于jquery+css3实现左右摇摆可滑动展开折叠圆形导航菜单
简单实现,学习参考
今天的这款HTML5动画非常有特点,它是一棵随风摇动的树,但是这棵树是模拟出来的,外观并不是那么逼真,只是树的骨架出来了。树的结构由SVG描述而成,之前我们也介绍过过许多关于SVG的动画特效,比如HTML5 SVG多折线...
jquery css3鼠标悬停摇摆动画效果是一款利用css3 animate属性实现的网格布局div鼠标悬停摇摆动画效果。
css3牛顿摇摆球碰撞动画特效,5颗吊着的小球碰撞形成左右来回摆动动画效果。
一款基于HTML5 Canvas的3D动画杰作,它是一个可以随风飘动的3D衣服摇摆动画特效,非常逼真。当我们将鼠标滑过衣服时,衣服将会出现摇摆的动画,点击鼠标时,衣服将会更加剧烈地摆动。
flash动画逼真的金鸡蛋摇摆晃动素材下载 flash动画逼真的金鸡蛋摇摆晃动素材下载
今天我们要给大家分享一款超萌的CSS3小猫咪动画特效,一只银白色的可爱小猫咪挂在绳索上,不停地左右摇摆,眼睛一眨一眨,尾巴摇摇摆摆,显得非常可爱。小猫咪是通过CSS3绘制的,摇摆的动画特效也是通过CSS3动画相关...
一款jQuery登录插件,当用户名或密码错误时,登录框左右摇摆,各位可以根据自己的需要进行更改后直接使用
wiv.js 一个让div元素产生摇摆效果的JS动画库