为了让用户更舒适的在某些情况下,利用动画是那么非常有必要的。Android在3.0一旦支持两种动画Tween动漫Frame动画。Tween动画支持简单的平移,缩放,旋转,渐变。Frame动画就像Gif图通过一系列图片来模拟动画效果,而在Android 3.0以后引入了新的动画就是属性动画(property
animation)。Android 分享一个简单有趣的动画效果 就是利用了属性动画。



今天我们主要来学习Tween动画也就是View动画。

View 动画仅仅能应用于View对象,并且仅仅支持一部分属性。并且对于View
动画,它仅仅是改变了View对象绘制的位置。而没有改变View对象本身,比方当前有一个button的坐标是(200,200)通过平移动画移动到(200,500),可是你点击移动后的button是没有不论什么效果,例如以下图:

知道了这个大前提我们就開始了解View动画的基本使用方法吧。动画能够用java代码写也能够用xml写

1,平移动画

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:repeatCount="10"
android:repeatMode="restart"
android:toXDelta="0%"
android:toYDelta="70%" > </translate>

duration动画时间。fillAfter保持动画结束后状态,fromXDelta起始X位置,fromYDelta起始Y位置,repeatCount反复次数,repeatMode反复模式 restart为正序 reverse为倒序,在java代码中用

Animation animation =AnimationUtils.loadAnimation(this, R.anim.tran_btn);

view.startAnimation(animation);

<span style="font-size:18px;">Animation animation2 = new TranslateAnimation(0, 20, 0, 0);
animation2.setDuration(2000);
animation2.setRepeatCount(10);
animation2.setRepeatMode(Animation.RESTART);
button.startAnimation(animation2);</span>

new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta)

看參数相信大家也都知道意思了

2。旋转动画

<?

xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
>
</rotate>

大致同上。pivot旋转的中心点.

	Animation animation2 = new RotateAnimation(0, 360, 0, 0);
animation2.setDuration(2000);
button.startAnimation(animation2);

3,渐变动画

<span style="font-size:18px;"><?

xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0.0" > </alpha></span>

事实上看通一个剩下的都是触类旁通

<span style="font-size:18px;">Animation animation = new AlphaAnimation(1, 0);
animation.setDuration(3000);
button.startAnimation(animation);</span>

4。缩放动画

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXScale="0.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0" > </scale>

ok,这下四种基本动画都简单的结束了一下。可是我们有时可能会有一些特殊的需求。比方让播放一组动画,这时我们能够使用set

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <rotate
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" /> <alpha
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0.0" /> </set>

这是旋转于渐变同一时候播放,假设依次播放的话仅仅需加上startOffset

<?

xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <rotate
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" /> <alpha
android:duration="2000"
android:fromAlpha="1.0"
android:startOffset="2000"
android:toAlpha="0.0" /> </set>

这样就能够依次播放。但有时我们想要一下特殊的效果比方说动画的加速度,这时候我们能够用上interpolator,animation.setInterpolator(new AccelerateInterpolator());

AccelerateDecelerateInterpolator 在动画開始与结束的地方速率改变比較慢。在中间的时候加速

AccelerateInterpolator  在动画開始的地方速率改变比較慢。然后開始加速

AnticipateInterpolator 開始的时候向后然后向前甩

AnticipateOvershootInterpolator 開始的时候向后然后向前甩一定值后返回最后的值

BounceInterpolator   动画结束的时候弹起

CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator 在动画開始的地方快然后慢

LinearInterpolator   以常量速率改变

OvershootInterpolator    向前甩一定值后再回到原来位置

谢谢耐心的看完。不积跬步无以至千里,有什么疑问的话也能够留言。。

Android 动画具体解释View动画的更多相关文章

  1. Android图文具体解释属性动画

    Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)開始. ...

  2. android 动画基础绘——view 动画(二)[补]

    前言 这个是对view 动画的补充,是一些view 动画的特殊使用场景. 回顾第一篇关于view 动画的,我介绍到view的动画都是针对元素本身的. 当我们开发view动画的时候,我们看到几个元素在做 ...

  3. android 动画基础绘——view 动画

    前言 对android 动画的整理,android 动画分为view动画(也叫补间动画),帧动画,属性动画. 看到这几个概念,让我想起了flash这东西.如果需要查各种动画具体的含义,那么可以去查询f ...

  4. Android 动画具体解释Frame动画 (Drawable Animation)

    Frame动画像gif画画,通过一些静态的图片,以实现动画效果. Android sdk该AnimationDrawable就是专门针对Frame动画,当然Frame动画也可在java代码或者xml中 ...

  5. 虾扯蛋:Android View动画 Animation不完全解析

    本文结合一些周知的概念和源码片段,对View动画的工作原理进行挖掘和分析.以下不是对源码一丝不苟的分析过程,只是以搞清楚Animation的执行过程.如何被周期性调用为目标粗略分析下相关方法的执行细节 ...

  6. android动画具体解释四 创建动画

    使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合.ValueAnimator 使你能够对这些类型的值进行动画.你需通过调用ValueAnimator ...

  7. Android动画-View动画

    View动画 Android动画分为三类:View动画,帧动画,和属性动画.帧动画也是View动画的一种. View动画的作用对象是View,之所以强调这一点是因为其作用对象有别于Android的另一 ...

  8. android动画具体解释二 属性动画原理

    property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字 ...

  9. Android 动画效果 及 自定义动画

    1. View动画-透明动画效果2. View动画-旋转动画效果3. View动画-移动动画效果4. View动画-缩放动画效果5. View动画-动画效果混合6. View动画-动画效果侦听7. 自 ...

随机推荐

  1. [Android学习笔记]双缓冲绘图技术

    双缓冲技术绘图: 什么情况下产生的双缓冲技术?当数据量很大时,绘图可能需要花费很长的时间,这样屏幕就会出现卡顿,闪烁等现象. 什么是双缓冲技术?双缓冲是在内存中创建一个与屏幕绘制区域一致的对象,先将图 ...

  2. 常见问题(FAQ) | VPNCUP

    常见问题(FAQ) | VPNCUP 常见问题(FAQ) 关于FAQ 新手开始 登录验证问题 为什么刚注册后,登录VPN服务器提示错误? 免费注册的用户有哪些限制? 为什么连接免费VPN后20分钟自动 ...

  3. Thrift反序列化导致OOM(转)

    概述 最近线上的日志处理服务偶尔会出现Out Of Memory的问题,从Exception的call stack中顺藤摸瓜,最终定位到是thrift反序列化的问题. 发现问题 先交代一下问题现场: ...

  4. 属性“dataProvider”有多个初始值设定项。(注意:“dataProvider”是“mx.charts.BarChart”的默认属性)。

    1.错误描写叙述 属性"dataProvider"有多个初始值设定项.(注意:"dataProvider"是"mx.charts.BarChart&q ...

  5. Struts2中指定的校验文件不起作用的原因

    转载请注意出处:http://blog.csdn.net/bettarwang/article/details/39801733 我们知道,假设要为某个Action指定校验文件.那么就要将" ...

  6. C语言文件操作之fgets()

        来说一说fgets(..)函数.     原型  char *  fgets(char * s, int n,FILE *stream);     參数:          s: 字符型指针, ...

  7. Erlangserver紧内存优化解决方案

    提出的问题:server100万人在线,16G内存快被吃光. 玩家进程占用内存偏高 解决方法: 第一步: erlang:system_info(process_count). 查看进程数目是否正常,是 ...

  8. hdu5119(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5119 分析:dp[i][j]表示由前i个数组成异或和为j的方法数,则dp[i][j]=d[i-1][j ...

  9. Redis启动多端口,运行多实例(转)

    使用redis在同一台机器上,启用多个端口,实现多个实例,完成集群的模拟实现. 启动多实例 redis默认启动端口为6379,我们可以使用 --port 来指定多个端口,如下,在linux终端命令: ...

  10. Java学习之道:空指针错误求解救????????????

    运行下面这个主方法红色代码的地方就报如下错: https://api.weibo.com/2/users/show.json?access_token=2.00szM9cCc4R_EC6ebcf150 ...