说到淡入淡出动画,可能大家会想到补间动画里面的AlphaAnimation,不过这个深浅动画只能对透明度做渐变效果,也就是只能对一个图形做深浅的颜色变换。如果我们想要从A图片逐渐变为B图片,也就是要实现淡入淡出(Fade-in and Fade-out)效果时,AlphaAnimation显然就不够用了。

幸好Andoird急我们之所急,想我们之所想,Animation不行,还有Drawable可以试试呀。前面的博文在图形章节中,博主提到了下列几种Drawable:
1、StateListDrawable:详见《 Android开发笔记(七)初识Drawable》
2、ShapeDrawable:详见《 Android开发笔记(八)神奇的shape》
3、NinePatchDrawable:详见《 Android开发笔记(九)特别的.9图片》
其实Drawable种类繁多,远不止这三种。如果认真阅读Android的开发文档,也许你已经发现了TransitionDrawable,就是TransitionDrawable能帮助我们实现淡入淡出的动画效果。

废话少说,直接上代码看看TransitionDrawable是怎么工作的。下面代码同时实现了AlphaAnimation和TransitionDrawable的使用,方便大家对比这两种动画效果。

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private ImageView iv_alpha;private AlphaAnimation alphaAnimation;private TransitionDrawable transitionDrawable;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn_play1 = (Button) findViewById(R.id.btn_play1);Button btn_play2 = (Button) findViewById(R.id.btn_play2);btn_play1.setOnClickListener(this);btn_play2.setOnClickListener(this);iv_alpha = (ImageView) findViewById(R.id.iv_alpha);//一开始先设置透明,这样图片不会显示,等点击按钮时再显示iv_alpha.setAlpha(0.0f);alphaAnimation = new AlphaAnimation(0.0f, 1.0f);alphaAnimation.setDuration(3000);    //深浅动画持续时间alphaAnimation.setFillAfter(true);   //动画结束时保持结束的画面}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_play1) {iv_alpha.setImageResource(R.drawable.alpha_begin);iv_alpha.setAlpha(1.0f);iv_alpha.setAnimation(alphaAnimation);alphaAnimation.start();} else if (v.getId() == R.id.btn_play2) {//淡入淡出动画需要先设置一个Drawable数组,用于变换图片Drawable[] drawableArray = {getResources().getDrawable(R.drawable.alpha_begin),getResources().getDrawable(R.drawable.alpha_end)};transitionDrawable = new TransitionDrawable(drawableArray);iv_alpha.setImageDrawable(transitionDrawable);transitionDrawable.startTransition(3000);}}}

下面是淡入淡出动画的效果图

点击下载本文用到的淡入淡出动画的工程代码

点此查看Android开发笔记的完整目录

Android开发笔记(十五)淡入淡出动画TransitionDrawable相关推荐

  1. Android开发笔记(五十四)数据共享接口ContentProvider

    ContentProvider 前面几节介绍了进程间通信的几种方式,包括消息包级别的Messenger.接口调用级别的AIDL.启动页面/服务级别的Notification,还有就是本节这个数据库级别 ...

  2. Android开发笔记(五十二)通知推送Notification

    PendingIntent 准备工作复习一下PendingIntent,前面的博文< Android开发笔记(五十)定时器AlarmManager>已经提到了它.PendingIntent ...

  3. Android开发笔记(五十九)巧用传感器

    传感器Sensor 传感器是Android用来感知周围环境以及运动信息的工具.因为具体的感应信息依赖于相关硬件,所以虽然Android提供了众多的感应器,但不是每部手机都能支持这么多感应器,恰恰相反, ...

  4. Android开发笔记(十七)GIF动画的实现GifAnimation

    GIF在Windows上是常见的图片格式,主要用来播放短小的动画.但在手机上由于系统资源紧张,所以Android并没有直接支持GIF格式,如果在ImageView中放入一张gif文件,你会发现显示出来 ...

  5. Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频.其中对摄像头Camera的介绍参见&l ...

  6. Android开发笔记(五十三)远程接口调用AIDL

    AIDL概述 AIDL全称是"Android Interface Definition Language",即Android的接口定义语言.AIDL用来协助开发者来处理进程间通信, ...

  7. Android开发笔记(五十八)铃声与震动

    拖动条SeekBar SeekBar继承自进度条ProcessBar,有关ProcessBar的介绍见<Android开发笔记(四十九)异步任务处理AsyncTask>.SeekBar与P ...

  8. Android开发笔记(五十六)摄像头拍照

    相机Camera Camera是直接操作摄像头硬件的工具类.常用的方法如下: getNumberOfCameras : 获取本机的摄像头数目 open : 打开摄像头,默认打开后置摄像头.如果有多个摄 ...

  9. Android开发笔记(五十五)手机设备基本操作

    获取手机基本信息 手机的基本信息分两类,一类是与电话有关的信息,另一类是设备自身的信息. 与电话有关的信息可由TelephonyManager类获得,常用的参数与对应的方法如下所示: 网络运营商名称 ...

最新文章

  1. 错误linux autocof.h,【技巧】一种提高 [ 定位Linux内核编译错误 ] 效率的方法
  2. 选择排序_在N + 1场景中,使用@NamedEntityGraph更有选择地加载JPA实体
  3. 经常会提到的Java面试题
  4. [Music]若是每个人都彼此关怀
  5. java用递归删除文件夹_Java中通过递归调用删除文件夹下所有文件
  6. go语言基础到提高(1)-hello,world
  7. .net 把一个对象赋值给一个参数_Java:new一个对象的过程中发生了什么?
  8. 扎克伯格的中文夜:想要成功就不能放弃
  9. qt linux webservice,Qt实现访问WebService
  10. JavaScript -- arguments、apply 、call、bind
  11. 如何在Windows 10上安装MySQL数据库服务器8.0.19
  12. linux redis 数据迁移,redis cluster 迁移数据
  13. 《JavaScript高级程序设计2》学习笔记——BOM
  14. 十进制、二进制、八进制、十六进制对照表
  15. 车载一体机凯立德导航升级
  16. 学校计算机专业春联大全带横批,关于学校的春联带横批.doc
  17. Xilinx HydraMini试玩教程
  18. Go语言panic详解中
  19. 关于拿蓝桥杯省一这件事
  20. countupjs,一个有趣的数字翻滚动画

热门文章

  1. 数学建模 聚类模型
  2. 蓝桥杯 基础练习 阶乘计算
  3. Python爬虫实战03:用Selenium模拟浏览器爬取淘宝美食
  4. 小程序navigator跳转路径url写法
  5. 自动化测试--testNG
  6. Python2读取Excel文件时候文件名称是中文的时候处理
  7. html大学生活主题班会,我的大学生活主题班会策划书
  8. invalid comparison: java.util.Date and java.lang.String
  9. 用Docker快速搭建一个博客网站,很简单的嘛~
  10. 公钥、私钥、数字签名和数字证书的概念及解密