android编程 简单的渐变动画

时间:2022-04-24 23:20:38

简单的渐变动画其实很常用到,例如在手机上程序载入时,就可以加入一个简单的渐变动画页面

关于android的动画教程其实有很多,这里只单单对渐变动画进行一下详细讲解,目的在于能使初学者能快速的上手掌握。

其实觉得这类动画大同小异,学习过本文后,对其他动画也能较容易地接受

在Android中其实有两种动画,分别是Tween AnimationFrame Animation

前者是对同一个图像做不同的操作已达到各种动画效果

例如本文所讲的的便是调整一个图像的透明度使其有一个简单的渐变动画效果

而后者则是按照设定的顺序在一定时间内播放不同的图片造成的一种动画效果

在这里有一点要注意一下

在Tween Animation中,图像没有真正的改变,例如平移,其实图像是没有动的,你看到的仅仅只是程序的操作

这点可能现在并不是很理解,不过可以记着,有一天遇到类似的问题,也许它会使你明白

 

言归正传,正式开始

首先就不用说了,建立一个新的Android工程

然后在res目录中新建一个文件夹,随你起名字,不过一般起一个贴切易懂的名字更易操作维护一些

就叫anim吧,然后在其中新建一个xml文件,先起名叫anim1

现在可以开写了

其中在XML中可以定义4动画效果,如下:

alpha 渐变透明度动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果

当然这些也是可以在代码中定义的,不过不推荐,不如在xml中定义使用方便

这次我们说先说第一个,就是alpha

我们要在anim1中写入的内容是

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

很简单,一共只有8行,1,2行不管,有第三行开始

alpha当然就是渐变透明度动画效果的意思了

下方一共有三个属性:

android:fromAlpha="0.0"           这个是初始的透明度,0.0的意思就是说完全透明,就是你看不到
android:toAlpha="1.0"     这个则是动画结束时的透明度,1.0意思就是说完全不透明
android:duration="2000"       这是持续时间,单位是毫秒,这里就是2秒的意思

这样就定义完毕了一个在2秒内逐渐显现出来的图像动画效果

然后介绍一下如何来调用它

首先要在main.xml中定义一个ImageView,起个名字

<ImageView android:id="@+id/ready1" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_x="0dp"
android:layout_y="0dp"
android:src="@drawable/br0"
/>

上面这个大家都懂的啊,不细说了

然后在程序中定义一下,之后就开始调用动画了

int animationSrouceId  = 0x7f040000;//资源文件的ID

Animation ani1 = AnimationUtils.loadAnimation(getApplicationContext(), animationSrouceId);

ImageView img1;

img1 = (ImageView)findViewById(R.id.ready1);

img1.startAnimation(ani1);

OK,这就完成了,再解释一下

首先定义的那个animationSrouceId变量,有点长。。不过这样显得专业也一些,他的值其实就是R.anim.anim1,就是在R中给这个资源文件的ID

下面这个效果完全同上

Animation ani1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim1);

ImageView img1;

img1 = (ImageView)findViewById(R.id.ready1);

img1.startAnimation(ani1);

对比一下更易理解点

这样就完成了,可以点执行看一下自己的成果了

然后我们来加点料

现在,我想要一个淡入淡出的效果,就是让图案的透明度有0到1,等个3秒,然后在有1到0,慢慢显示出来再慢慢消失,懂?

好了,别往下翻,想一下,有个大概的思路或者试验一下再继续

 

 

 

 

 

 

OK,看这里

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

。。。这里有了2个alpha和一个新的属性startOffset

主要说一下startOffset,他的意思是,等待一定时间后,再开始执行动画

例如startOffset="5000"的意思就是等待5秒后再执行这个动画

要点来了,注意注意,这个5秒不是由上一个动画结束后开始计时,而是由调用该文件时就开始计时

上一个动画花了2秒,所以这个动画是在上一个动画结束3秒后开始

所以如果他等于2秒的话就是两个动画接连执行,等于0的话就是同时执行

结束。。。

懂得举一反三才能学好程序

剩下的就交给你们了