android中为我们定义了几种常见的动画:
AlphaAnimation:透明度变化动画
RotateAnimation:旋转动画
ScaleAnimation: 缩放动画
TranslateAnimation:位置变化动画
但这是不够的,很多时候我们需要实现自己的动画,查看任何一个类的源码,比如AlphaAnimation,可以发现他们都是继承自Animation基类,并且都重写了initialize,applyTransformation方法。于是我们也按部就班的做,一般来说applyTransformation方法是必须重写的。
一个最简单控制透明度变化的动画:
class AlphaAnimation extends Animation {
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
t.setAlpha(interpolatedTime);
}
}
一个左右抖动的动画,当然也可以使用android自带的那个抖动。
/**
* 左右抖动
* @author reyo
*
*/
class ShakeAnimation extends Animation {
private int shakeTimes=7;//摇摆次数
private int shakeRange=50;//摇摆幅度
public ShakeAnimation(){
}
public ShakeAnimation(int shakeTimes,int shakeRange){
this.shakeTimes = shakeTimes;
this.shakeRange = shakeRange;
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
protected void applyTransformation(float interpolatedTime,Transformation t) {
int dx=(int)(shakeRange*Math.sin(interpolatedTime*Math.PI*shakeTimes));
int dy=0;
t.getMatrix().setTranslate(dx,dy);
}
}
控制小球做圆周运动的动画,可以实现类似火星,金星,地球围绕太阳转的效果。
/**
* 圆周运动
* @author reyo
*
*/
class CircleAnimation extends Animation {
private int r=100;//旋转半径
private int angle=360;//旋转角度
public CircleAnimation(){
}
public CircleAnimation(int r,int angle){
this.r = r;
this.angle = angle;
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
protected void applyTransformation(float interpolatedTime,Transformation t) {
int dx=(int)(r*Math.cos(interpolatedTime*Math.PI*angle/180));
int dy=(int)(r*Math.sin(interpolatedTime*Math.PI*angle/180));
t.getMatrix().setTranslate(dx,dy);
}
}
如果你数学学的足够好,那么可以实现更复杂的动画,我这里只是运用了几个简单的sin,cos罢了,点到为止!
分享到:
相关推荐
在Android开发中,动画(Animation)是提升用户体验和视觉...通过自定义动画,开发者可以创造出独特且引人入胜的交互效果,使应用更加生动有趣。在实际开发中,应结合具体需求选择合适的动画类型,并注意性能和用户体验。
在这里,我们主要关注基于`Animation`类的自定义动画,它是Android早期版本中主要的动画实现方式。 一、理解Animation `Animation`是Android动画的基础类,它定义了动画的基本行为,如持续时间、重复次数等。`...
在Android中,我们可以继承`ObjectAnimator`或`ValueAnimator`来创建自定义动画。 2. **动画管理器(Animation Manager)**:用于管理和协调多个动画,例如同时启动或序列执行多个动画,以及处理动画的暂停、恢复和...
在创建自定义动画时,我们通常会继承自`android.animation.Animator`或其子类,如`ObjectAnimator`、`ValueAnimator`等。对于自定义动画,我们需要实现`applyTransformation`方法,该方法在动画的每一帧被调用,用于...
本示例源码“IOS应用源码之使用CoreAnimation自定义的UIControl”着重展示了如何利用Core Animation来扩展苹果的基础控件UIControl,为用户提供更为丰富的交互体验。 首先,UIControl是iOS中一个基础的事件处理控件...
这个源码包“IOS应用源码——使用CoreAnimation自定义的UIControl.rar”显然是一个示例项目,展示了如何利用Core Animation来创建自定义的UIControl。UIControl是iOS SDK中的基础控件类,它继承自UIView,通常用于...
1. **动画类的设计**:自定义动画通常会定义一个继承自`ValueAnimator`或`ObjectAnimator`的类,以扩展Android原生动画系统的功能。这包括添加新的属性、提供更灵活的控制选项,以及支持更丰富的动画类型。 2. **...
本项目“IOS应用源码——使用CoreAnimation自定义的UIControl.zip”是一个示例,展示了如何利用Core Animation来定制一个自定义的UIControl,以实现独特的交互体验。 首先,Core Animation是苹果操作系统内核的一...
本项目“ios应用源码之使用coreanimation自定义的uicontrol”旨在教授如何利用Core Animation来定制自己的UIControl,从而实现更加独特且交互性强的用户界面。 首先,了解Core Animation的基本概念是必要的。Core ...
虽然自定义动画可以增加应用的视觉吸引力,但过度使用或设计不当的动画可能会导致性能问题。因此,在设计动画时,要考虑设备的性能和电池寿命,尽量保持动画简洁流畅,避免过于复杂的计算和渲染。 7. **兼容性考虑...
自定义动画渲染器Interceptor是一种高级技巧,可以让我们对动画的执行过程有更精细的控制,以实现独特的视觉效果。Interceptor允许开发者在动画播放的过程中插入自定义逻辑,从而创造出与系统默认动画不同的动态效果...
首先,要创建一个自定义动画View,我们需要创建一个新的Java类,继承自Android的基础View类或者它的子类,如ViewGroup、ImageView等。通常,我们选择直接继承View,因为它是最基础的视图类,可以提供足够的灵活性。 ...
1. 创建自定义动画控件通常需要继承View或ViewGroup,并重写onDraw()方法来绘制动画效果。通过Canvas进行绘图操作,如drawRect()、drawCircle()等。 2. 动画的时间控制:可以通过setDuration()设置动画持续时间,...
在实际开发中,自定义动画可能涉及到对XML动画资源的编写,这样可以在布局文件中声明动画,并在代码中通过`AnimationUtils.loadAnimation()`加载。同时,还要注意性能优化,避免过度使用动画导致应用卡顿。 博客...
在Android开发中,自定义动画是一项重要的技能,它能让应用的交互更加生动有趣,提升用户体验。"BAnim_FilpLibrary.rar"是一个专门为Android平台设计的自定义动画库,提供了丰富的翻转效果,使得开发者可以轻松地在...
如果内置的动画效果不能满足需求,开发者还可以通过继承`BaseAnimationAdapter`并重写`getAnimationForView`方法,自定义动画逻辑。 5. **性能优化** 虽然动画能提升用户体验,但过多的动画可能会影响ListView的...
自定义动画主要涉及到两个方面:绘制动画和属性动画。绘制动画通常通过重写`onDraw()`方法并在每次绘制时更新进度来实现;而属性动画则是利用Android的Animation框架,改变组件的某些属性值,如进度值,以达到动画...
在Android应用开发中,自定义动画是提升用户体验和界面美观度的重要手段。本项目"自定义动画toast.zip"提供了一种实现方式,旨在帮助学生、个人开发者或公司团队在自己的应用中实现独具特色的提示信息展示。传统的...