最近需要做一个搜索动画的呼吸灯效果,在网上查了下有以下两种实现方式,现记录下来。

实现呼吸灯效果本质上都是使用ImageView动画,实现alpha值变化。

第一种方式,直接使用动画实现,代码如下:

private final int BREATH_INTERVAL_TIME = 1000; //设置呼吸灯时间间隔
private AlphaAnimation animationFadeIn;
private AlphaAnimation animationFadeOut; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mode_select_layout);
breathImageView = (ImageView)findViewById(R.id.breathImageView); animationFadeIn = new AlphaAnimation(0.1f, 1.0f);
animationFadeIn.setDuration(BREATH_INTERVAL_TIME);
// animationFadeIn.setStartOffset(100); animationFadeOut = new AlphaAnimation(1.0f, 0.1f);
animationFadeOut.setDuration(BREATH_INTERVAL_TIME);
// animationFadeIn.setStartOffset(100); animationFadeIn.setAnimationListener(new Animation.AnimationListener(){ @Override
public void onAnimationEnd(Animation arg0) {
breathImageView.startAnimation(animationFadeOut);
} @Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub } @Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub } }); animationFadeOut.setAnimationListener(new Animation.AnimationListener(){ @Override
public void onAnimationEnd(Animation arg0) {
breathImageView.startAnimation(animationFadeIn);
} @Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub } @Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub } });
breathImageView.startAnimation(animationFadeOut); }

第二种方式,使用timer实现,代码如下:

增加动画alpha_fade_in.xml

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

alpha_fade_out.xml

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

Activity中代码:

private ImageView breathImageView;
private Timer timer;
private boolean isOpen = true;
private int index = 0;
private final int BREATH_INTERVAL_TIME = 1000; //设置呼吸灯时间间隔 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mode_select_layout);
breathImageView = (ImageView)findViewById(R.id.breathImageView);
startTimer();
}
public Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
breathImageView.clearAnimation();
breathImageView.setAnimation(getFadeIn());
break;
case 2:
breathImageView.clearAnimation();
breathImageView.setAnimation(getFadeOut());
break;
}
super.handleMessage(msg);
}
}; private Animation getFadeIn() {
Animation fadeIn = AnimationUtils.loadAnimation(ModeSelectPage.this,
R.anim.alpha_fade_in);
fadeIn.setDuration(BREATH_INTERVAL_TIME);
fadeIn.setStartOffset(100);
return fadeIn;
} private Animation getFadeOut() {
Animation fadeOut = AnimationUtils.loadAnimation(ModeSelectPage.this,
R.anim.alpha_fade_out);
fadeOut.setDuration(BREATH_INTERVAL_TIME);
fadeOut.setStartOffset(100);
return fadeOut;
} private void startTimer() {
timer = new Timer(true);
TimerTask task = new TimerTask() {
@Override
public void run() {
if (isOpen) {
if (index == 2) {
index = 0;
}
index++;
Message message = new Message();
message.what = index;
handler.sendMessage(message);
}
}
};
timer.schedule(task, 0, BREATH_INTERVAL_TIME); // 延时0ms后执行,5000ms执行一次
} @Override
protected void onDestroy() { isOpen = false;
if (timer != null) {
timer.cancel();// 退出计时器
}
timer = null; super.onDestroy(); }

Android呼吸灯效果实现的更多相关文章

  1. Android 呼吸灯流程分析

    一.Android呼吸灯Driver实现 1.注册驱动 代码位置:mediatek/kernel/drivers/leds/leds_drv.c 602static struct platform_d ...

  2. ZYNQ自定义AXI总线IP应用——PWM实现呼吸灯效果

    一.前言 在实时性要求较高的场合中,CPU软件执行的方式显然不能满足需求,这时需要硬件逻辑实现部分功能.要想使自定义IP核被CPU访问,就必须带有总线接口.ZYNQ采用AXI BUS实现PS和PL之间 ...

  3. CSS动画总结与呼吸灯效果

    首先,先介绍一下主要用到的css属性:animation,text-shadow. text-shadow就不再介绍了,上一篇已经详细介绍了用法.这里先介绍一下animation属性. 1.anima ...

  4. Android呼吸灯添加

    平台:mtk 一.hal层入口    Lights.c (vendor\mediatek\proprietary\hardware\liblights)     char const*const RE ...

  5. 好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button

    我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单很多. 首先是定义一个TextBlock例如以下. <Grid> <TextBlock Name=& ...

  6. 【转】Android中通知的提示音、震动和LED灯效果小例子

    通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...

  7. 浅浅的分析LED呼吸灯的实现和PWM的关系

    前言 在本周,我们在python课上做了一个实验,用ARDUINO使小LED灯模仿出呼吸灯的效果,实验进行的很成功,但是机器当仅输出高/低电平的时候是怎么样才能做到渐亮渐暗(输出电压)的变化呢?在这里 ...

  8. STM32呼吸灯

    使用STM32开发板和mbed平台实现的一个呼吸灯.材料,LED灯,电阻,STM32开发板. 先上一张效果图. 背景: 我们之前设置GPIO口使用了DigitalOut,数字信号输出.只能是GPIO口 ...

  9. (原创)用Verilog实现一个参数化的呼吸灯(Verilog,CPLD/FPGA)

    1.Abstract     观察到一个有趣的现象,每当把Apple笔记本合上的时候,那个白色的呼吸灯就会反复地由暗渐明,然后又由明渐暗,乍一看就像Apple笔记本在打盹休息一样,十分可爱!于是突发奇 ...

随机推荐

  1. PHP 打印前一天的时间

    时间格式为 2000-02-02 02:02:02 echo date('Y-m-d H:i:s', strtotime( '-1 day', time() ) ):

  2. MySQL中int(M)和tinyint(M)数值类型中M值的意义

    在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M: 后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插 ...

  3. 【nginx】之proxy_pass

    在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径:如果没有/,表示相对路径,把匹配的路径部分也给代理走.     假设下面四种情况分别用 h ...

  4. LeetCode——7. Reverse Integer

    一.题目链接:https://leetcode.com/problems/reverse-integer/ 二.题目大意: 给定一个整数,要求反转该整数之后再返回:如果归返回的整数超过了int型整数的 ...

  5. Ubuntu 14.10 下安装Spark

    Spark 是一种与 Hadoop 相似的开源集群计算环境,不过最近非常火.下面介绍安装步骤. 1 安装scala 1.1 我选用的是2.11.4,下载地址http://www.scala-lang. ...

  6. PAT 甲级 1001 A+B Format (20)(20 分)

    1001 A+B Format (20)(20 分) Calculate a + b and output the sum in standard format -- that is, the dig ...

  7. Web jsp开发学习——Session使用

    先展示效果:              导包:    在servlet的doget里创建session      在head里显示session     接下来进行注销的命令    点击注销链接到这个 ...

  8. 廖雪峰Java4反射与泛型-3范型-4擦拭法

    1.擦拭法是Java泛型的实现方式. 编译器把类型视为Object. * 泛型代码编译的时候,编译器实际上把所有的泛型类型T统一视为Object类型.换句话说,虚拟机对泛型一无所知,所有的工作都是编译 ...

  9. 部署redis5.0.3

    一.准备环境 1.下载 # wget http://download.redis.io/releases/redis-5.0.3.tar.gz [root@localhost ~]# wget htt ...

  10. 2012 - AD GC全局编录服务器(Global Catalog)

    普通域控制器只记录本域对象的信息,而GC全局编录服务器则不仅记录本域所有对象的只读信息,还记录林中所有其他域中部分域对象的只读信息.   GC全局编录服务器作用: 1,存储对象信息副本,提高搜索性能: ...