`
轻指飞扬
  • 浏览: 32598 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Android自定义动画学习,实现左右摇摆动画

阅读更多

我们都知道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);
	}
}

 

 

1
0
分享到:
评论

相关推荐

    Android晃动动画例子

    在Android中,我们可以使用`ObjectAnimator`或`ValueAnimator`来创建自定义动画。晃动动画通常涉及到视图位置的改变,通过在X轴上不断改变视图的位置来模拟晃动效果。首先,我们需要在`res/anim`目录下创建两个XML...

    Android自定义Animation实现View摇摆效果

    总结来说,Android自定义Animation实现View摇摆效果主要是通过创建`RotateAnimation`,设定旋转角度、中心点、持续时间和重复模式。这样,当动画应用于View时,就可以模拟出物体摇摆的视觉效果。此技术适用于任何...

    Android的秋千摇摆动画代码例子

    "Android的秋千摇摆动画代码例子"是一个示例项目,展示了如何实现类似钟摆或秋千的左右摇摆动画效果。这种动画常见于游戏、模拟器或者任何需要物体动态摆动的情境中。接下来,我们将深入探讨如何在Android中创建此类...

    Android动画介绍-插值器

    5. **AnticipateInterpolator**:这种插值器会先向反方向移动,然后再按预期方向加速移动,常用于弹簧或摇摆动画效果。 6. ** OvershootInterpolator**:它使动画超越目标位置,然后回弹到目标位置,模拟物理世界的...

    Android应用源码之listview 的各种动画效果.zip

    - **自定义动画**:开发者可以通过重写`onLayout()`或使用第三方库来实现更复杂的动画效果,如淡入淡出、缩放、旋转等。 3. **内置动画效果** - Android SDK提供了一些内置的动画类,如AlphaAnimation(透明度...

    android studio watch 双向摆动设计

    在这个项目中,开发者需要利用API来控制表盘指针的动画,使得指针能够根据输入数据正负值进行左右移动,这涉及到了Android的动画系统和事件处理机制。 动画在Android中可以通过Animation或Animator类来实现。对于...

    Android-安卓动画Interpolators的可视化

    这为动画设计提供了极大的灵活性,可以实现诸如回弹、摇摆等复杂的效果。 可视化Interpolators可以帮助开发者直观地了解不同插值器如何影响动画。例如,你可以通过绘制插值器的输出值与输入值的图表来观察动画的...

    Andorid动画——PoroertyAnimator属性动画

    在Android开发中,动画是提升用户体验的关键因素之一。本文将深入探讨Android的Property Animator属性动画,它是Android 3.0(API级别11)引入的一种强大的动画系统,为开发者提供了更多的控制力和灵活性。我们将...

    listview 的各种动画效果.zip

    6. **自定义动画**: - 开发者可以创建自定义的Animator或Animation类,以实现特定的动画效果,例如使用ValueAnimator进行复杂的动画控制。 7. **动画监听器**: - 添加监听器(如AnimatorListener或...

    AmazeUI CSS动画

    4. **自定义动画**:除了预定义的动画,开发者还可以利用AmazeUI提供的工具和类,根据需求创建自己的CSS动画。这通常涉及到对CSS3关键帧(@keyframes)的理解和运用,通过设置不同时间点的样式来定义动画过程。 5. ...

    androird钟摆单摆.rar

    在Android开发中,"androird钟摆单摆.rar"是一个示例项目,它演示了如何在移动设备上实现一个模拟真实物理世界中的钟摆运动的动画效果。这个项目可能包含了必要的代码、资源文件以及布局设计,让开发者可以观察到...

    AndroidViewAnimations源码.zip

    3. 自定义动画:如果预定义的动画效果无法满足需求,开发者可以参考现有类的实现,创建自己的动画类,从而丰富应用的动画效果。 总结,AndroidViewAnimations库为开发者提供了丰富的视图动画解决方案,通过深入研究...

    自定义控件 根据重力感应旋转摆动图片

    在这个场景中,我们关注的是一个自定义的ImageView控件,它能够根据设备的重力感应数据实现图片的左右摇摆效果。这个功能可以为应用程序带来更丰富的交互体验,比如模拟真实的物体摆动,或者增加游戏中的动态元素。 ...

    listview 的各种动画效果

    这可以通过自定义Footer View并添加旋转、渐变等动画实现。 4. **Item交换动画**: 如果你需要在ListView中实现类似拖放的功能,可以使用`ObjectAnimator`或`PropertyAnimator`来创建交换两个列表项时的动画。 5....

    View摆动效果

    当我们谈论“View摆动效果”,通常是指在ListView的项视图(item view)上实现一种类似摇摆或者晃动的动画效果,以此提升用户体验,增加交互的趣味性。 首先,让我们了解摆动效果的基本原理。摆动效果通常通过...

    动画效果代码.rar

    通过熟练掌握这些属性,开发者能够实现丰富的动画效果,提升Android应用的用户体验。在实践中,结合其他动画属性和方法,如动画的持续时间、重复次数等,可以创造出更为复杂且吸引人的动画场景。

    非常华丽的android书架源码.zip

    总的来说,"非常华丽的android书架源码.zip" 是一个深入学习Android UI设计、动画实现、性能优化和用户交互的好教材。通过分析和理解源码,开发者不仅可以掌握如何创建美观的书架界面,还能提升自己在Android应用...

Global site tag (gtag.js) - Google Analytics