Android 动画使用 scale、alpha、translate、rotate、set

scale:尺寸伸缩动画

alpha:渐变透明动画

translate:位移动画

rotate:旋转动画

调用动画文件 给View执行动画

动画文件可以存放在res下的anim目录 Android Studio的话 需要自己手动创建这个文件夹
比如说我在anim下创建了一个动画文件名为scaleanim.xml那么在Java中引用的话
//加载动画对象
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scaleanim);
//启动动画
view.startAnimation(animation);
//另外 动画animation还有一个执行监听事件  使用如下 使用场景比如说启动页面 动画结束后跳转页面

 animation.setAnimationListener(new Animation.AnimationListener() {
        /**
         * 动画启动
         * @param animation
         */
        @Override
        public void onAnimationStart(Animation animation) {

        }

        /**
         * 动画结束
         * @param animation
         */
        @Override
        public void onAnimationEnd(Animation animation) {

        }

        /**
         * 动画重复
         * @param animation
         */
        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });

Animation属性

android:duration        动画持续时间,以毫秒为单位 
android:fillAfter          如果设置为true,控件动画结束时,将保持动画最后时的状态
android:fillBefore       如果设置为true,控件动画结束时,还原到开始动画前的状态
android:fillEnabled    与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
android:repeatCount 重复次数
android:repeatMode  重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
android:interpolator  设定插值器,其实就是指定的动作效果,比如弹跳效果等。

scale尺寸伸缩动画

首先在anim目录下创建scaleanim.xml文件
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="700"
    android:fromXScale="0.0"
    android:fromYScale="0.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1.0"
    android:toYScale="1.0" />
  1. duration:动画的执行时间 毫秒为单位
  2. fromXScale:执行动画的起始缩放X轴
  3. fromYScale:执行动画的起始缩放Y轴
  4. pivotX:缩放起点X轴坐标
  5. pivotY:缩放起点Y轴坐标
  6. toXScale:执行动画的结束缩放X轴
  7. toYScale:执行动画的结束缩放Y轴

toYScale、toXScale、fromXScale、fromYScale这几个属性都是缩放比例 浮点数类型 一般使用0-1之间的数值

pivotX、pivotY 这两个属性可以是数值、百分数、百分数p 三种样式。

先上一张效果图

可以看到该图片的图片动画启动点是中间 因为pivot的X Y轴设置的是50%的缩放 fromXScale fromYScale写的是0 所以从小到大缩放

如果toXScale 设置超过1会怎么样

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

可以看到动画执行结束的时候 图片比之前变大了一些
因为结尾的X、Y 轴设置的是1.5则表示在原大小 放大了0.5倍 1是原比例
另外 这里将pivot的X、Y轴缩放属性给删除了,所以这个动画起始位置是从左上角开始执行的
因为x y轴默认值是0 所以没有进行缩放的话 就是从左上角开始执行 如果需要效果由大变小的话 将fromScale和toScale的值互换即可。

保留缩放后的大小

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

添加属性android:fillAfter="true" 即可保留结束的状态
而且我这里将起始X、Y轴(fromXScale、fromYScale)缩放了0.5 
可以看到现在效果是把图片缩小了一半再慢慢放大。之前是缩小到最小 再放大的。
另外pivotY、pivotX属性 当取值在百分数后面加上一个字母p,就表示,取值的基数是父控件,即在原点的基础上增加的值是父标签的百分值。  

alpha渐变动画

先在anim文件夹下创建动画文件alphaanim.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="3000"
    android:fillAfter="true">
</alpha>
fromAlpha:起始透明度  1为不透明 0为透明
toAlpha:结束透明度
duration:动画执行时间 单位毫秒
fillAfter:是否保留结束后的状态

fromAlpha、toAlpha都是比例 浮点类型 0.0-1.0  1为原样 0最透明看不见
透明动画其实比较简单  就不做过多叙述了。

rotate旋转动画

创建动画文件
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360">
</rotate>
  • fromDegrees:开始旋转的角度 正值表示顺时针 负值表示逆时针
  • toDegrees:结束旋转的角度 正值表示顺时针 负值表示逆时针
  • pivotX、pivotY跟scale动画的概念一样。

第一张图是没有缩放pivotX pivotY的 那么它的起始x y都是0 所以是从左上角开始旋转

第二张图是 x y都缩放50% 即从中间开始旋转

忘了录屏重复旋转的了 就简单写一下吧  
android:repeatCount 重复次数 如果想一直自动重复的话  给它一个-1就好
android:repeatMode 这个属性是重复类型 有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍
另外repeatMode必须与repeatCount一起使用才能看到效果
未添加pivot缩放

缩放pivot 50%

translate平移动画

android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;

android:toXDelta 结束点X轴坐标

android:toYDelta 结束点Y轴坐标

创建动画 移动Y轴
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromYDelta="0"
    android:toYDelta="79%p">
</translate>
创建动画 向左横移
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromXDelta="0"
    android:toXDelta="-43%p">
</translate>
抛物线 (虽然抛的不好看)同时移动X Y轴
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="43%p"
    android:toYDelta="79%p">
</translate>

动画组 SET

set标签自已是没有属性的,他的属性都是从Animation继承而来,但当它们用于Set标签时,就会对Set标签下的所有子控件都产生作用。
还是创建一个xml文件在anim文件夹下
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="3000"  
    android:fillAfter="true">  
      
  <alpha   
    android:fromAlpha="0.0"  
    android:toAlpha="1.0"/>  
    
  <scale  
    android:fromXScale="0.0"  
    android:toXScale="1.4"  
    android:fromYScale="0.0"  
    android:toYScale="1.4"  
    android:pivotX="50%"  
    android:pivotY="50%"/>  
    
  <rotate  
    android:fromDegrees="0"  
    android:toDegrees="720"  
    android:pivotX="50%"  
    android:pivotY="50%"/>  
         
</set>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容