Android 动画实现-原来如此简单

Android动画相关基本知识可以参考:Android 动画初步Android 动画 Tween AnimationAndroid 动画 Frame AnimationAndroid 属性动画 (Property Animation)Android 动画 Property AnimationObjectAnimator Demo上面这些都是Android动画的基本知识,掌握这些基本知识以后,我们就可以来实践一下了,先来张最终的效果图。

效果图

第一幅gif

第二幅gif

先来说一下在Android上实现上面的动画有几种方式

1. 简单的实现,直接用Gif,我们知道Android在5.0之前天生不支持Gif,但是GitHub上应有尽有,所以找一个支持Gif的第三方类库不是难事。

2. 另一种简单的实现,直接用Tween Animation,实现起来比较简单。

3. 以上两种方法都有个共同的缺点,App体积无形中会增大很多,因为起码要放本地动态图或者逐帧图,另外在性能较差的手机上表现比较差,用户体验不好,那么有什么更好的方法吗,当然有,Android为我们提供了足够强大的 Animator 系统,使用Animator可以很好的实现上面的效果,这篇博客博主就跟着大家一起来实现上面的动画效果。提前透露一点,全部动画使用 Android 3.0 以后引入的 Animator,如果想兼容Android 3.0 可以使用 NineoldAndroids第三方动画库。

还得啰嗦一句,如果你没有基本的动画基础,请阅读前面提及的动画基础知识系列博文。

实现分析

先来分析第一幅Gif图:

这个图一共有9个动画动作,而且是顺序执行,这个是基本的思路,然后再细化下去,其中的9个动画动作又进一步分为alpha + scaleX + scaleY 等等叠加动作,所以必须对顺序动作,叠加动作有个基本的认识,另外还有个基本的坐标知识,比如最后的一个动作,从左边拉过来的动画,以这张静态图所在的中心位置(0,0)为相对坐标,以Android左上角(0,0)原点坐标为绝对坐标,所以一开始这个图的坐标为X

轴上的值计算如下:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTitle, "translationX", -(dm.widthPixels / 2 + mTitle.getWidth() / 2), 0F);

第二幅Gif图:

和前面一张图基本差不多,唯一不同的是动画的叠加动作比较多,其他基本相同,所以不再赘述。

我们先以第一个动画,小房子从下往上的回弹动画为例。

动画实现

private void translateFromButtom(){

    ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mHouse, "translationY", mHouse.getHeight(), 0F);//动画在Y轴方向平移,注意这里的坐标计算,前面提及过如何计算坐标。
    objectAnimator.setDuration(1500);//设置动画时间
    objectAnimator.setInterpolator(new BounceInterpolator());//设置回弹效果
    objectAnimator.addListener(new AnimatorListenerAdapter()//设置动画监听
    {
        @Override
        public void onAnimationStart(Animator animation)
        {
            super.onAnimationStart(animation);
            mHouse.setVisibility(View.VISIBLE);//一开始隐藏小房子,动画开启以后才显示。
        }
        @Override
        public void onAnimationEnd(Animator animation)
        {
            super.onAnimationEnd(animation);

            scaleAlpha();//启动第二个动画
        }
    });
    objectAnimator.start();
}

这个动作比较简单,是个沿着Y轴方向的单一动画,下面几个动画可以触类旁通,不再详解了,直接上干货。

下面的几个动画是类似的,所以不再给出,这样,第一幅动画就结束了,是不是很简单(^o^)/~

接下来,我们看看第二幅动画的实现,前面说过第二幅动画除了单个动画复合动作比较多,其他和第一幅动画相同,所以我们直接奔着关键点而去,废话少说,直接贴上第二幅四个相似复合动画的实现,其他几个都比较简单,不再赘述。

接下来是从四周飞出的动画效果

这样第二幅动画就完成了,在具体的开发中,如果你不注意在Activity中的onCreate(Bundle savedInstanceState)生命周期中实现了上面的一些列动画,那么几乎可以肯定的是,第一个动画肯定会比较卡,这个肯定与手机的性能无关,为啥会这样?只要你看过前面反复提及的Android动画基础博文,肯定能找到答案,这里不再赘述了,好了,上面的实践到此结束,下面Android动画博文会涉及复杂的实现,敬请期待。

时间: 2024-12-24 04:58:54

Android 动画实现-原来如此简单的相关文章

Android中的补间动画(tween)的简单使用

相对帧动画,补间动画(tween)可以这么理解:我们不必像帧动画一样指定动画的每一帧,只需定义一个动画的开始和结束关键帧,而中间变化的帧由系统帮我们计算. tween动画可以分为下面几种: AlphaAnimation(透明渐变动画): 示例:res/anim/alpha.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.andr

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

Android 动画 6问6答

1.view 动画有哪些需要注意的? 答:view动画 本身比较简单.http://www.cnblogs.com/punkisnotdead/p/5179115.html 看这篇文章的第五问就可以了. 2.如何给viewGroup 子元素出场时增加动画效果? 答:以listview 为例. 1 <?xml version="1.0" encoding="utf-8"?> 2 <layoutAnimation xmlns:android="

Android动画基础

Android动画主要有三种: 1> 视图动画,也叫Tween(补间)动画可以在一个视图容器内执行一系列简单变换(位置.大小.旋转.透明度).譬如,如果你有一个TextView对象,您可以移动.旋转.缩放.透明度设置其文本,当然,如果它有一个背景图像,背景图像会随着文本变化. 补间动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具可读性.可重用性. 2> Drawable动画其实就是Frame动画(帧动画),它允许你实现像播放幻灯片一样的效果,这种动画的实质其实是Dra

Android动画(1)——ViewAnimator

ViewAnimator是一个ViewGroup视图容器,它的父类是FrameLayout.因此简单的来讲它的布局方式同FrameLayout,但是能对它的子视图的进入和隐藏用动画实现. 作用:动画实现一些简单的分层视图. 它的XML实现如下: <ViewAnimator android:id="@+id/viewAni" android:layout_width="match_parent" android:layout_height="0dip&

Android动画AnimationSet遇到的问题。

之前对Android动画这块一直是一知半解,知道个大概,并不会使用.刚好这几天没有太多的任务要做,可以梳理一下Android动画的一些知识.Android Animation的基础用法就不说了,这里主要记录下简单实用中遇到的问题. 1.XML中AnimationSet的某些属性有些问题. 主要就是android:repeatCount,android:repeatMode无效.这个问题据说是Google的工程师刻意为之.[参考:http://stackoverflow.com/questions

Android 动画详解

这次主要就介绍android动画,android动画目前分为三种形式,Tween Animation 这个只能应用于view对象上面的,Drawable Animation这个是帧动画,就是类似我们有一些列的图片依次播放图片时出现的动画,Property Animation 这个是属性动画,这也是在android3.0之后引进的动画,在手机的版本上是android4.0就可以使用这个动画,下面我们主要就是针对这三种情况进行介绍. Tween Animation 这个动画在Property Ani

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

Android动画三部曲之一 View Animation &amp; LayoutAnimation

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50612827 本篇文章对android的Tween动画和帧动画以及布局动画进行总结. Tween动画 XML语法介绍 插值器 Interpolator 自定义Interpolator 公共XML属性及对应的方法 ScaleAnimation 缩放动画 xml定义缩放动画 代码定义缩放动画 RotateAnimation 旋转动画 xml中设置旋转动画 代码中设置旋转动画 Transl