文档章节

android动画浅析

 风过后
发布于 2016/01/07 17:44
字数 1556
阅读 91
收藏 7

经过这几天对android动画的学习,本人对android动画有了些浅显的了解。

android动画分为三大类:帧动画(Frame animation)、补间动画(tween animation)、属性动画(property animation

),其中帧动画、补间动画是3.0之前的产物。属性动画是3.0之后才产生的。

1、帧动画

    帧动画比较简单,它就像播放gif一样一针一针(一针也就是其中的一张图片)的播放。下面我们就以播放一个gif为例讲解一下帧动画。

    1) 首先需要做的是下载一个gif,然后将其分解成一张一张的图片,网上有许多分解的网站,比如:

                www.360doc.com/content/13/0314/18/699582_271506280.shtml

    2)现在你应该得到了一个图片包了,里边有许多图片。将其放入drawable文件夹下。

    3)在drawable目录下创建一个xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <!--   
    根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画  
    根标签下,通过item标签对动画中的每一个图片进行声明  
    android:duration 表示展示所用的该图片的时间长度  
     -->  

    <item
        android:drawable="@drawable/loading_0"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_1"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_2"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_3"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_4"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_5"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_6"
        android:duration="100"/>
    <item
        android:drawable="@drawable/loading_7"
        android:duration="100"/>

</animation-list>

    4)使用

ImageView iv = (ImageView) findViewById(R.id.progressbar);
iv.setBackgroundResource(R.drawable.progress_dialog);
AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
ad.start();

至此帧动画使用完成

2、补间动画,补间动画很强大能实现我们大部分时候的需要。

首先来说说原理,不见动画tween animation它是通过你给出两个关键状态即开始状态和结束状态,然后中间的过程由android框架给你自动完成。动画基本就是此原理,其实很简单。这样有人会问了,我不要让它给我实现我要自己去控制中间的过程,包括效果展示,速度的快慢等等,那要怎么办呢?android肯定会给我们留接口的,后面再说。

补间动画主要分这四种:

    渐变尺寸放大缩小:ScaleAnimation

    透明度渐变:AlphaAnimation

    移动渐变:TranslateAnimation

    旋转渐变:RotateAnimation

上面四个类都继承至Animation类,这四个类的用法很简单

AlphaAnimation实现淡入淡出的效果

//方式一通过代码的方式定义透明度动画
AlphaAnimation aphaAnimation=new AlphaAnimation(1f,0.1f);
alphaAnimation.setDuration(3000);//设置动画持续时间为3秒
alphaAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(alphaAnimation);

ScaleAnimation实现放大缩小渐变

主要属性及说明:

fromXScale(浮点型)属性为动画起始时X坐标上的缩放尺寸

fromYScale(浮点型)属性为动画起始时Y坐标上的缩放尺寸

toXScale(浮点型) 属性为动画结束时X坐标上的缩放尺寸

toYScale(浮点型) 属性为动画结束时Y坐标上的缩放尺寸

说明: 以上四种属性值

0.0表示收缩到没有

1.0表示正常无缩放

值小于1.0表示收缩

值大于1.0表示放大

pivotX(浮点型) 属性为动画相对于物件的X坐标的开始位置

pivotY(浮点型) 属性为动画相对于物件的Y坐标的开始位置

//方式一通过代码的方式定义缩放动画
Animation scaleAnimation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f);
scaleAnimation.setDuration(2000);//设置动画持续时间为3秒
scaleAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
scaleAnimation.setRepeatCount(3);
imgShow.startAnimation(scaleAnimation);

TranslateAnimation移动动画

//方式一通过代码的方式定义位移动画
Animation translateAnimation=new TranslateAnimation(0, 100, 0, 0);
translateAnimation.setDuration(3000);//设置动画持续时间为3秒
translateAnimation.setInterpolator(this, android.R.anim.cycle_interpolator);//设置动画插入器
translateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(translateAnimation);

RotateAnimation实现旋转的动画效果

      主要属性及说明:

repeatCount 重复次数

fromDegrees为动画起始时物件的角度:

当角度为负数——表示逆时针旋转

当角度为正数——表示顺时针旋转

(负数fromDegrees——toDegrees正数:顺时针旋转)

(负数fromDegrees——toDegrees负数:逆时针旋转)

(正数fromDegrees——toDegrees正数:顺时针旋转)

(正数fromDegrees——toDegrees负数:逆时针旋转)

toDegrees属性为动画结束时物件旋转的角度可以大于360度

pivotX,pivotY 为动画相对于物件的X、Y坐标的开始位.说明:以上两个属性值从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置。

Animation rotateAnimation=new RotateAnimation(0, 45);
rotateAnimation.setDuration(3000);//设置动画持续时间为3秒
rotateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(rotateAnimation);

同时以上所有的动画实现方式还可以通过xml文件来配置,这里就不多做说明。

AnimationSet实现动画集合

如果我要实现旋转的时候同时进行淡入淡出怎么办呢?AnimationSet可以解决此问题。

Animation rotateAnimation=new RotateAnimation(0, 45);
rotateAnimation.setDuration(3000);//设置动画持续时间为3秒
AlphaAnimation aphaAnimation=new AlphaAnimation(1f,0.1f);
alphaAnimation.setDuration(3000);//设置动画持续时间为3秒
AnimationSet set = new AnimationSet(true);
set.add(rotateAnimation);
set.add(alphaAnimation);
imageShow.startAnimation(set);

上面只是简单的几种动画,但是现实可以能有各种各样的动画需要,大部分可以用上面的方式解决,但是有时候我们需要自己定义自己的动画效果。AlphaAnimation ScaleAnimation RotationAnImation TransexAnimation这几个类都是继承至Animation基类,同样如果根据实际需要我们也可以继承Animation基类来实现自己想要的效果。

下篇本人将来谈谈动画更高级的东西包括属性动画以及实现自定义动画效果。

本篇完


© 著作权归作者所有

粉丝 1
博文 17
码字总数 16917
作品 0
成都
私信 提问
android自学笔记《四》——应用程序结构分析

昨天在帖子里看到的一个分析方法,很简单,给大家分享下! 呵呵,由于我也是刚开始学习Android,还没有学到下面这些知识,这里就直接截图了。 看完他这个分析之后,我对Android程序有了一个简...

郭子
2012/02/03
0
1
2017 我用 5 个月分享了 98 篇优秀博文

对上半年所分享的文章进行一个整理,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可以查找了。 如果觉得...

code小生
2018/10/30
0
0
Android HWUI硬件加速模块浅析

原址 什么是硬件加速(What) 传统软件的UI绘制是依靠CPU来完成的,硬件加速就是将绘制任务交由GPU来执行。Android系统负责硬件加速的模块主要是HWUI,如下图所示: 为什么要硬件加速(Why)...

u010164190
2018/04/27
0
0
第二讲:Android系统构架分析和应用程序目录结构分析

本讲内容: Android系统构架简介 Android应用程序结构分析 点这里下载:Android学习指南第二讲源代码 一、Android系统构架 Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露...

神勇小白鼠
2011/03/10
0
5
Ubuntu下android学习——(2)Android系统构架分析和应用程序目录结构分析

一、Android系统构架 Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 英文不好,那下面是简单翻译的版本: Linux内核(LinuxKernel) Android运行在linux...

OrionBox
2012/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
5
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0
聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部